2016-05-02 3 views
2

у меня был этот URL на моем сайте example.com/foo.php, и я изменил его example.com/foo, делая это в моем HTAccess:Простой 301 перенаправление создает бесконечный цикл в моем htaccess?

RewriteRule ^foo$ foo.php [NC,L] 

И это прекрасно работает. Однако я бы хотел сделать 301 перенаправление со старого URL на новый URL. Поэтому я добавил эту строку в моей Htaccess:

RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301] 

И я получаю бесконечный цикл перенаправлений ... Как исправить это?

ответ

0

Вы можете избежать ошибки контура с помощью THE_REQUEST переменной:

RewriteCond %{THE_REQUEST} /foo\.php [NC] 
RewriteRule ^foo\.php$ http://example.com/foo [L,R=301] 
RewriteRule ^foo$ foo.php [NC,L] 

Или, если вы находитесь на апача 2.4, вы можете использовать END флаг

RewriteRule ^foo\.php$ http://example.com/foo [L,R=301] 
RewriteRule ^foo$ foo.php [NC,END] 
+2

END tag решил мою проблему, спасибо! Позаботьтесь, чтобы объяснить, что он делает? –

+1

Конечный флаг завершает процесс перезаписи. иначе без END целевой путь foo.php снова повторяет шаблон первого правила и создает бесконечное внутреннее перенаправление. – starkeen

0

Если изменить порядок его не должен» t. Попробуйте ниже хорошо работает:

RewriteEngine on 
RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301] 
RewriteRule ^foo$ foo.php [NC,L]