我们有一个网站,其中有4种语言,其中3种在子文件夹中,即
/
/de/
index.html
about-us.html
...
/fr/
index.html
about-us.html
...
/index.html
/about-us.html
...
默认的EN语言不在其他文件夹中(上图),它们位于根目录下。
到目前为止,我有htaccess
代码,我可以通过%{HTTP:Accept-Language}
检测3种语言,它可以解决问题。
我遇到的问题是,当他们点击导航中的EN选项(/
)时,语言检测会通过htaccess启动。如果点击它,我怎么能这样做,我可以告诉.htaccess忽略语言检测?
我尝试了HTTP_referer
路线,我说如果没有检测到引荐来源,检测语言并继续,如果引用者是网站名称,则忽略它。这不起作用(重定向太多)。
我没有服务器端支持,因为文件实际上是通过Gulp构建的所有html文件,但如果没有其他解决方案可用,WORSE案例可以使用它。
答案 0 :(得分:1)
在friend的帮助下,如果找不到具有值语言的cookie,我最终会通过htaccess创建cookie。设置语言后,用户就会查看英语内容(位于htaccess
所在的根路径中) - htaccess将不会进行语言检测。
RewriteEngine On
# 301 = aggressively by the browser (use only on Production/Live)
# 302 = temporary redirect (use for development)
RewriteCond %{HTTP_COOKIE} !language=set [NC]
RewriteCond %{HTTP:Accept-Language} fr [NC]
RewriteRule ^$ /fr [co=language:set:%{HTTP_HOST}:10:/,L,R=302]
RewriteCond %{HTTP_COOKIE} !language=set [NC]
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteRule ^$ /de [co=language:set:%{HTTP_HOST}:10:/,L,R=302]
RewriteCond %{HTTP_COOKIE} !language=set [NC]
RewriteCond %{HTTP:Accept-Language} es [NC]
RewriteRule ^$ /es [co=language:set:%{HTTP_HOST}:10:/,L,R=302]
此页面中的这个重要片段(Tips for debugging .htaccess rewrite rules)也有帮助,我在本地使用301重定向,浏览器主动缓存,这使得调试变得困难。
301提示
- 在完成测试之前不要使用301 我看过很多帖子,人们仍然在测试他们的规则并且他们正在使用301。 别。如果您没有在您的网站上使用建议1,不仅仅是您, 但是,当时访问您网站的任何人都将受到301的影响。 请记住,它们是永久性的,并且会被您的主动缓存 浏览器。 使用302代替,直到您确定,然后将其更改为301
醇>