1

我有一堆可能带有或不带有 www 的域。对于其中一些域,如果它们可以移动到 m.domain.com,我想将它们重定向。如果我做 1 个域,它可以工作。例如:

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC]
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3\b[NC]
RewriteCond %{HTTP_HOST} ^domain1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.com$
RewriteRule .* "http\:\/\/m\.domain1.com/" [R,L]

但是当我尝试捕获域名并在规则中使用它时,它似乎不起作用,例如:

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC]
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3\b[NC]
RewriteCond %{HTTP_HOST} ^(domain1\.com)$ [OR]
RewriteCond %{HTTP_HOST} ^www\.(domain1\.com)$ [OR]
RewriteCond %{HTTP_HOST} ^(domain2\.com)$ [OR]
RewriteCond %{HTTP_HOST} ^www\.(domain2\.com)$
RewriteRule .* "http\:\/\/m\.$1/" [R,L]

$1 没有设置域名。知道我做错了什么吗?

TIA

4

1 回答 1

1

有两个问题

RewriteRule .* "http\:\/\/m\.$1/" [R,L]

一,您不需要/在替换 URL 路径中转义字符(如此处),因为它不被视为模式,而只是文本。允许使用$%反向引用,但不需要转义。

其次,要捕获您需要的主机子组,%1而不是$1因为子组来自RewriteCond而不是RewriteRule. 所以,你可以改变你.htaccess

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC]
RewriteCond %{HTTP_USER_AGENT} \b(agent1|agent2|agent3)\b[NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?((?:domain1|domain2)\.com)$ [NC]
RewriteRule ^ http://m.%1/ [R=301,L]

条件匹配任何以 开头但使其可选的%{HTTP_HOST}域名。后跟 要么后跟。www\.(?: ... )?domain1|domain2.com

于 2013-08-18T14:01:40.900 回答