我有一堆域名,可能有或没有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|agent3b[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|agent3b[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 未设置域名。知道我做错了什么吗?
蒂亚
有两件事有问题
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
。