500 Ошибка сервера: бесконечный цикл перезаписи в Apache 2.2.x с mod_vhost_alias, VirtualDocumentRoot и mod_rewrite для маршрутизации / «симпатичных» URL - PullRequest
1 голос
/ 22 июня 2009

Я сталкиваюсь с проблемой использования директив Apache mod_vhost_alias и mod_rewrite для маршрутизации "симпатичных URL-адресов" на локальной машине разработки. Я знаю, что это возможно, потому что мой хостинг-провайдер использует аналогичную конфигурацию и не имеет проблем. Однако всякий раз, когда я пытаюсь установить свою локальную машину, Apache возвращает 500 Internal Server Error, а в журналах указывается слишком много внутренних перенаправлений.

Обычно Готово

Обычно при добавлении доменов на локальный компьютер для разработки я следую простому обычному процессу:

  • Создайте каталог в /path/to/www/ с именем в соответствии с доменом, то есть: /path/to/www/example.local/
  • Добавить запись в /etc/hosts для нового домена, то есть: 127.0.0.1 example.local
  • Добавить директиву VirtualHost для нового домена с DocumentRoot, установленным в /path/to/www/example.local/pub/
  • Перезагрузите Apache

Проблема

Недавно я начал использовать директиву VirtualDocumentRoot, предоставленную mod_vhost_alias, чтобы очистить мой постоянно растущий список директив VirtualHost и избавить меня от хлопот перезапуска Apache после каждого нового домена:

CanonicalName Off
VirtualDocumentRoot /path/to/www/%0/pub/

В одном из доменов, скажем, example.local, у меня может быть следующее:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule .* index.php/%0 [L]

Это типичный "красивый URL" / шаблон маршрутизации для большинства современных приложений и сред. Однако Apache входит в бесконечный цикл перенаправления, когда я пытаюсь загрузить example.local/anything/that/should/work в свой браузер.

Я включил RewriteLog, чтобы определить, что происходит, и обнаружил, что Apache выполняет следующее:

  • Удалить префикс каталога (/path/to/www/example.local/pub/) из URL
  • Обрабатывайте RewriteRules нормально, как и ожидалось, генерируя /index.php/anything/that/should/work
  • Снова добавьте префикс каталога, получив: /path/to/www/example.local/pub/index.php/anything/that/should/work
  • Начать сначала. (!?!?)

Вопрос

Кто-нибудь еще видел такое поведение и сформулировал исправление для него? Кроме того, может ли кто-то увидеть явную ошибку в моей конфигурации Apache, которая может отсутствовать?

Ответы [ 2 ]

4 голосов
/ 28 июля 2009

Попробуйте использовать RewriteBase, у меня была такая же проблема, и она работала для меня. Удачи.

0 голосов
/ 22 июня 2009

Вы пытались добавить флаг NS в RewriteRule:

RewriteRule .* index.php/%0 [L,NS]
...