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