.htaccess 多部分访问重定向

.htaccess 多部分访问重定向,.htaccess,redirect,http-redirect,.htaccess,Redirect,Http Redirect,嘿,伙计们,让我的htaccess正确重定向有点困难,我希望能得到一些帮助 我希望DEV domain.com?CampID=AB12345重定向到 http://DEV-www.domain.com/landing/external-marketing/direct-mail/AB?CampId=AB12345 RewriteCond %{HTTP_HOST} ^DEV-(www\.)?domain\.com [NC] RewriteCond %{QUERY_STRING} ^CampID=

嘿,伙计们,让我的htaccess正确重定向有点困难,我希望能得到一些帮助

我希望
DEV domain.com?CampID=AB12345
重定向到
http://DEV-www.domain.com/landing/external-marketing/direct-mail/AB?CampId=AB12345

RewriteCond %{HTTP_HOST} ^DEV-(www\.)?domain\.com [NC]
RewriteCond %{QUERY_STRING} ^CampID=
RewriteRule (\w{2})(\w{5})$ http://DEV-www\.domain\.com/landing/external-marketing/direct-mail/$1?CampId=$1$2 [R=301,L]

不幸的是,由于某种原因,我无法让它工作?

因为重写规则匹配是针对url路径的,而不是查询字符串。试试这个:

RewriteCond %{HTTP_HOST} ^DEV-(www\.)?domain\.com [NC]
RewriteCond %{QUERY_STRING} ^CampID=(\w{2})(\w{5})
RewriteRule .* http://DEV-www.domain.com/landing/external-marketing/direct-mail/%1?CampId=%1%2 [R=301,L]
此外,您不需要在目标url中转义点
,只需在匹配模式中转义。请注意,如果您决定使用目标url
CampID
而不是
CampID
,则需要设置另一个条件:

RewriteCond %{REQUEST_URI} !^/landing/external-marketing/direct-mail/

为了避免无限重定向,因为带有
CampID
的目标将匹配您的RewriteCond规则…

实际上,我们可以使用
^(?i:CampID)=(\w{2})(\w{5})
对匹配进行不敏感的重写,域必须是匹配的一部分,因此我不确定是否可以合并重写条件=(