2009-06-22 3 views
0

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

Обычно Совершен

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

  • Создать каталог в /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, которая может отсутствовать?

ответ

0

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

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

У меня нет. Однако, как я уже упоминал выше, мой хостинг-провайдер использует этот метод для предоставления доменов в общей среде, и никаких дополнительных флагов не требуется. Спасибо за это предложение, и я сделаю это. –

4

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

+0

Также попытался добавить «RewriteBase /» к некоторым из моих блоков RewriteRule со смешанным успехом. Это _kinda_ работало, но не последовательно. –

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

  • Нет связанных вопросов^_^