Цикл перенаправления в htaccess - PullRequest
0 голосов
/ 11 марта 2012

почему это вызывает цикл перенаправления?Как мне изменить код, чтобы он работал?

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 ]

1 голос
/ 11 марта 2012
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], если в некоторых запросах используются дополнительные параметры.

0 голосов
/ 11 марта 2012

Попробуйте это:

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]

Если вы зайдете на website.com с AL из 'de', а затем перенаправитесь на __store = german, ваш AL все равно будет 'de', поэтому он будет пытаться перенаправить на этот __store = german. Добавление флага [L] не позволит apache пытаться перенаправить несколько раз.

Это еще один вариант, хотя параметр ___store должен быть таким же, как и язык принятия. Я думаю, что это должно работать (не совсем уверен в специфике передачи переменных из условия)

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} (de|nl) [NC]
RewriteCond %{QUERY_STRING} !^___store [NC]
RewriteRule ^$ http://website.com/?___store=%1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...