Htaccess语言检测到特定文件夹,其中默认EN语言不是文件夹

时间:2015-08-21 16:02:25

标签: apache .htaccess

我们有一个网站,其中有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案例可以使用它。

1 个答案:

答案 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提示

  
      
  1. 在完成测试之前不要使用301 我看过很多帖子,人们仍然在测试他们的规则并且他们正在使用301。   别。如果您没有在您的网站上使用建议1,不仅仅是您,   但是,当时访问您网站的任何人都将受到301的影响。   请记住,它们是永久性的,并且会被您的主动缓存   浏览器。 使用302代替,直到您确定,然后将其更改为301
  2.