2014-05-08 2 views
1

С моим апачом 2.4 я хочу следующее:Loop с правилами перезаписи в апаче 2.4

  • GET /file.html -> 301 редиректа путь /~
  • GET /~ -> Содержание возврата файла /file.html

В моем .htaccess у меня есть следующее:

RewriteEngine on 
RewriteBase/

RewriteRule ^file.html ~ [R=301,L] 
RewriteRule ^~ file.html [L] 

Но теперь также GET /~ возвращает 301 переадресацию на /~. Где ошибка? Я думал, что для GET /~ первое правило не применяется, а второе правило вернет содержимое файла file.html. Это то, что я хочу, с помощью mod_rewrite?

ответ

1

Проблема с вашими правилами заключается в том, что это вызовет бесконечный цикл, поскольку оба правила переписываются следующим образом: A->B и B->A.

Вы можете использовать это правило, чтобы избежать зацикливания:

RewriteEngine on 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+file\.html\s [NC] 
RewriteRule^~ [R=302,L,NE] 

RewriteRule ^~$ file.html [L,B] 

THE_REQUEST переменных представляет исходный запрос, полученный Apache из вашего браузера и он не получает перезаписан после выполнения некоторых правил перезаписи.

Смежные вопросы