我可以在.htaccess中为root和subdomain使用两个独立的基于浏览器语言的RewriteCond

时间:2011-08-15 00:03:50

标签: .htaccess subdomain

我可以在.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。有任何想法吗?谢谢!

3 个答案:

答案 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]

我转义了域名中的句点,并在移动子域的开头添加了^。这个标志意味着“从......开始。”

你也需要两套额外的英语规则。