我可以在.htaccess中使用两个独立的基于浏览器语言的RewriteCond吗?一个是域根,一个是子域'm'。
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /index_cz.php [L,R=301]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /m/index_cz.html [L,R=301]
目前第一条规则正常,但第二条规则似乎没有起作用,而是在找到语言“cs”时显示根index_cz.php。有任何想法吗?谢谢!
答案 0 :(得分:1)
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /index_cz.php [L,R=301]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /m/index_cz.html [L,R=301]
你的条件是一样的! apache应该如何发现差异!修改
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteCond %{HTTP_HOST} www\.domain\.com [NC]
RewriteRule ^(.*)$ /index_cz.php [L,R=301]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteCond %{HTTP_HOST} m\.domain\.com [NC]
RewriteRule ^(.*)$ /m/index_cz.html [L,R=301]
答案 1 :(得分:1)
一个接一个地解析规则。由于'L'指令,一旦满足条件,如果我的记忆良好,则不检查其他规则。这意味着你必须添加一些东西来区分你的条件。您希望何时应用每个重写规则? 'm'代表移动设备吗?您正在谈论子域名......然后,您应该在条件中检查子域名。
如果你真的有一个'm'子域名,你可能会遵循以下规则:
RewriteCond %{HTTP_HOST} m.YourDomain.com [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /m/index_cz.html [L,R=301]
RewriteCond %{HTTP_HOST} ([^.]+)\.YourDomain.com [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /index_cz.php [L,R=301]
Don'忘记用您的实际域名替换YourDomain.com。
这有帮助吗?
答案 2 :(得分:0)
我忘记了域检查中的一些字符。我应该写:
RewriteCond %{HTTP_HOST} ^m\.YourDomain\.com [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /m/index_cz.html [L,R=301]
RewriteCond %{HTTP_HOST} ([^.]+)\.YourDomain\.com [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /index_cz.php [L,R=301]
我转义了域名中的句点,并在移动子域的开头添加了^。这个标志意味着“从......开始。”
你也需要两套额外的英语规则。