我想检测用户的浏览器语言并将路径段附加到基本网址。例如,其中一个重定向如下所示:
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} !^/de
和RewriteCond %{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 ^/?$
也可以做同样的事情,因此我从我的答案中删除了这个额外的条件。