我试图用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]
因为无限循环而无法正常工作。
非常感谢。
答案 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]