.htaccess语言重定向:通过检测路径段避免无限循环

时间:2017-11-17 10:08:53

标签: apache .htaccess mod-rewrite

我想检测用户的浏览器语言,并将路径段添加到基本网址。例如,重定向之一如下所示:

RewriteEngine On    

RewriteCond %{REQUEST_URI} !^/de
RewriteCond %{REQUEST_URI} ^/
RewriteCond %{HTTP:Accept-Language} !en [NC]
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteRule ^(.*)$ /de [R=302,L]

我理解如下: 如果在www.domain.com之后没有/ de段并且请求主页(www.domain.com)并且英语不是首选语言而德语是首选语言重定向到www.domain.com/de。 我的问题是为什么RewriteCond %{REQUEST_URI} !^/deRewriteCond %{REQUEST_URI} ^/始终是 true ?在我的.htaccess中插入此重定向之前,我测试了我的配置here(在其他.htaccess问题中找到)并且它有效。如果您有其他解决方案,我欢迎它。谢谢。

1 个答案:

答案 0 :(得分:1)

你的规则应该重构为:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/de [NC]
RewriteCond %{HTTP:Accept-Language} !en [NC]
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteRule ^/?$ /de [R=302,L]

RewriteCond %{REQUEST_URI} ^/始终为真,因为REQUEST_URI始终以/开头。如果您使用RewriteCond %{REQUEST_URI} ^/$,那么它将按预期工作。我们可以在RewriteRule ^/?$中做同样的事情,因此我从答案中删除了额外的条件。