无限循环htaccess

时间:2014-08-26 08:34:32

标签: html apache .htaccess loops

我试图用3种语言制作一个简单的html网页。每种语言都有自己的目录,所以“/”中的index.html是英文,西班牙语索引是“/ es”,法语索引是“/ fr”。我试图基于浏览器语言或通过javascript在href onclick中建立的cookie为每种语言创建重定向规则。这是我的.htaccess代码:

RewriteEngine on

RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (es) [NC]
RewriteRule .* http://myweb.com/es/$1 [R=301,L]

RewriteCond %{HTTP_COOKIE} !^.*lang=FR.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (fr) [NC]
RewriteRule .* http://myweb.com/fr/$1 [R=301,L]

RewriteRule .* http://myweb.com/$1 [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

因为无限循环而无法正常工作。

非常感谢。

2 个答案:

答案 0 :(得分:0)

每次用户进入页面时都会重定向。 例如:有人有一个说“es”的cookie,但是他们会进入es目录,你仍然会一遍又一遍地将它们重定向到es页面。 您应该知道每个重定向应该在哪个页面上运行的条件。 像RewriteCond %{REQUEST_URI}

这样的东西

编辑: 这是:

RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR] 
RewriteCond %{HTTP:Accept_Language} (es) [AND] 
RewriteCond %{REQUEST_URI} !^myweb.com/fr.*$ 
RewriteRule .* myweb.com/es/$1 

答案 1 :(得分:0)

由于无条件的最后一条规则RewriteRule .* http://myweb.com/$1 [R=301,L],正在发生重定向循环。您的前两条规则也有错误,它们没有捕获任何组,而是将它们用作$1

以这种方式制定规则:

RewriteEngine on

RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (es) [NC]
RewriteRule ^((?!es/).*)$ http://myweb.com/es/$1 [R=301,L,NE]

RewriteCond %{HTTP_COOKIE} !^.*lang=FR.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (fr) [NC]
RewriteRule ^((?!fr/).*)$ http://myweb.com/fr/$1 [R=301,L,NE]

RewriteRule ^((?!(?:es|fr)/).*)$ http://myweb.com/$1 [R=301,L,NE,NC]