我有很多域名可能带有或不带有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
答案 0 :(得分:1)
有两个问题
RewriteRule .* "http\:\/\/m\.$1/" [R,L]
其一,您不需要在替换网址路径中转义字符(例如此处为/
),因为它不会被视为模式而只是文本。允许使用$
和%
反向引用,但不需要转义。
其次,要捕获主机子组,您需要%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
。