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



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

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} ^/总是正确的?在我的 .htaccess 中插入此重定向之前,我在这里测试了我的配置(在其他 .htaccess 问题中找到)并且它起作用了。如果您有其他解决方案,我欢迎它。谢谢。

您的规则应该重构为:

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 ^/?$也可以做同样的事情,因此我从我的答案中删除了这个额外的条件。

最新更新