RewriteEngine производит рекурсию, хотя NS (nosubreq) указан - почему? - PullRequest
2 голосов
/ 23 июля 2011

У меня есть это rewriterule:

RewriteRule ^authenticate   /id/authenticate.php [NS,QSA]

Я получаю эту ошибку:

[Сб 23 июля 05:12:37 2011] [ошибка] [клиент 62.178.15.161] Запрос превысил 10 внутренних перенаправлений из-за вероятной ошибки конфигурации.Используйте LimitInternalRecursion, чтобы увеличить лимит, если это необходимо.Используйте 'LogLevel debug', чтобы получить обратную трассировку., Referer: https://2x.to/id/authenticate

Я думал, что флаг NS должен предотвратить это.

Не работает ли он по какой-то причине,я не применил его правильно или я неправильно понял его цель?

Есть ли другой способ заставить эту программу перезаписи "работать" без переименования файла?

Редактировать:

Iадаптировал RewriteRule для:

RewriteRule ^authenticate$  /id/authenticate.php [QSA]

, который работает просто отлично.Однако меня все еще интересует, почему NS не работал.

1 Ответ

2 голосов
/ 23 июля 2011

Вы, вероятно, хотите, чтобы [L] здесь, а не [NS] - [NS], специально предназначен для подавления перезаписи в некоторых необычных ситуациях, когда Apache будет делать «внутренний» запрос самому себе, например, при обработке включений на стороне сервера.

Вам также может понадобиться сделать правило более конкретным - в зависимости от того, где находится это правило, возможно, что ^authenticate соответствует /id/authenticate.php. Если это так, вам нужно добавить более раннее правило, которое «вырезает» исключение для этого файла, например:

RewriteRule ^/id/authenticate\.php$ - [L]
...