htaccess中的重定向循环

时间:2012-03-11 11:44:25

标签: .htaccess loops

为什么会导致重定向循环?我如何更改代码,使其工作?

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteRule ^$ http://website.com/?___store=german
RewriteCond %{HTTP:Accept-Language} nl [NC]
RewriteRule ^$ http://website.com/?___store=dutch

谢谢,

托比

2 个答案:

答案 0 :(得分:1)

RewriteEngine On

RewriteCond %{QUERY_STRING}         !\b___store=\w+\b
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteRule ^$                      /?___store=german   [L,QSA]

RewriteCond %{QUERY_STRING}         !\b___store=\w+\b
RewriteCond %{HTTP:Accept-Language} nl [NC]
RewriteRule ^$                      /?___store=dutch    [L,QSA]

您不需要http://website.com.htaccess个文件循环,所以添加[L]不够好;你需要检测循环并寻找store参数是一个好方法。如果某些请求使用其他参数,您还需要[QSA]标志。

答案 1 :(得分:0)

试试这个:

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} de [NC]
RewriteCond %{QUERY_STRING} !^___store [NC]
RewriteRule ^$ http://website.com/?___store=german [L]

RewriteCond %{HTTP:Accept-Language} nl [NC]
RewriteCond %{QUERY_STRING} !^___store [NC]
RewriteRule ^$ http://website.com/?___store=dutch [L]

如果您使用'de'的AL进入website.com,然后您被重定向到__store = german,您的AL仍将是'de',因此它将继续尝试重定向到__store = german。添加[L]标志将阻止apache多次尝试重定向。

这是另一种选择,尽管___store参数必须与accept语言相同。我认为这应该有效(不完全确定从条件传递变量的具体细节)

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} (de|nl) [NC]
RewriteCond %{QUERY_STRING} !^___store [NC]
RewriteRule ^$ http://website.com/?___store=%1 [L]