Почему это правило mod_rewrite не работает так, как задокументировано? - PullRequest
1 голос
/ 09 февраля 2009

Я пытаюсь отладить перезапись URL на размещенном сайте, где у меня нет доступа к vhost.conf, и поэтому я не могу настроить журнал перезаписи. Как еще можно отладить правила, которые не работают?

Это правило, которое я пытаюсь исправить, если у кого-то есть понимание:

RewriteRule ^([^/]+)\.([^/]+)$ xslt.php [L]

То, что я ожидаю, произойдет: URL-адреса, содержащие точки, но без косой черты, должны быть переписаны так, чтобы указывать на xslt.php, а затем прекратить переписывание, чтобы оно не зацикливалось. Что на самом деле происходит? 500 Внутренняя ошибка сервера (которая пахнет - зацикливание). Я знаю, что могу добавить RewriteCond, чтобы специально исключить xslt.php, но я бы предпочел понять, почему это происходит в первую очередь.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2009

Почему бы не зацикливаться? В xslt.php есть точки, но нет косой черты. Попробуйте изменить настройки на [L, NS].

Редактировать: Ах, я вижу. Что вам не хватает, так это то, что [L] завершает все перезаписи для этого запроса, но все еще генерируется подзапрос, который получает свой собственный проход перезаписи. [NS] подавляет этот проход.

0 голосов
/ 09 февраля 2009

Флаг L вызывает перезапуск процесса перезаписи с использованием нового переписанного URL-адреса xslt.php, который также соответствует вашему шаблону.

Так попробуйте это:

RewriteCond $0 !^xslt\.php$
RewriteRule ^([^/]+)\.([^/]+)$ xslt.php [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...