为什么会导致重定向循环?我如何更改代码,使其工作?
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
谢谢,
托比
答案 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]