Предотвратите цикл RewriteRule в .htaccess

Я сделал довольно подробный ответ на SuperUser для подобного вопроса. Хотя я кивнулся там для того, чтобы быть слишком сложным, это кажется. Но это действительно имеет всю информацию, необходимо было бы написать сценарий прямого реестра, фиксируют для ассоциаций файлов. Если люди хотят, я могу повторно отправить текст здесь.

2
задан 28 August 2010 в 18:55
2 ответа

Вы попытались добавить 'L' (в последний раз) к Вашему RewriteRule? т.е.

RewriteRule ^.* /%1.html? [R=301, L]

Это отметит правило, как являющееся последним правилом, и чрезвычайно эквивалентно оператору завершения в C. После того как это правило выполняется, оно прекратит соответствовать правилам.

Это могло быть причиной?

Andrew

1
ответ дан 3 December 2019 в 12:17
  • 1
    , я попробовал его, но это проигнорировано. –  Hendrik Brummermann 28 August 2010 в 18:14
  • 2
    Можно ли включить и/или добавить ли RewriteLog к сообщению? Таким образом, включите RewriteLog /path/to/log и RewriteLevel 5 стать крайним подробный. –  Andrew M. 28 August 2010 в 18:24
  • 3
    Это продолжает применять правила снова и снова после того, как каждый переписывает: новый pastebin.ca/1927769 –  Hendrik Brummermann 28 August 2010 в 18:57
  • 4
    Первый RewriteRule будет соответствовать URL и передавать его внутренне, сохраняя URL браузера тем же. Можно ли дать мне URL второе условие (соответствие "старому запросу стиля"), попытка состоит в том, чтобы соответствовать? –  Andrew M. 28 August 2010 в 20:58
  • 5
    Чем Вы для подсказки с переписать журналом я теперь понимаю то, что происходит. Как обходное решение я добавляю параметр: rewrite=done к URL в первом блоке. И проверьте через RewriteCondition, что этот параметр не определяется прежде, чем отправить внешнее перенаправление. –  Hendrik Brummermann 31 August 2010 в 23:56

Переменные ENV Apache как набор переписывают, не сохраняются по перенаправлениям - поэтому, после того как Вы делаете R=301, он возвращается к начальной ситуации - запрос работает в совершенно новом апачском контексте. Это - Ваш бесконечный цикл.

Если Вы хотите сделать, это через переписывает (который имеет смысл - таким образом, браузер видит надлежащий URL), вероятно, необходимо настроить или cookie вместо того, чтобы пытаться использовать ENV или иначе сделать некоторый броский материал с фактическими путями сервера негласно, исключая определенные от перенаправления.

Также - [L], поскольку другие сказали, бесполезно - он заставит остальную часть hte rewriterules быть проигнорированной полностью.

1
ответ дан 3 December 2019 в 12:17
  • 1
    я думаю его логика, является неправильным; у него есть первое правило, преобразовывают a.html -> index.php?arianne_url=content/a, и второе правило преобразовывает index.php?arianne_url=content/a -> a.html. Последний комментарий к моему ответу запрашивал то, что он ОЗНАЧАЛ делать для второго правила. –  Andrew M. 29 August 2010 в 20:18

Теги

Похожие вопросы