Apache2 смешивание mod_vhosts_alias и mod_rewrite
Документы Apache2 рекомендуют mod_rewrite в качестве последнего средства для указания, в какой каталог отправлять данный запрос хоста. Они сказали, использовать mod_vhosts_alias. Я настроил это, и он работает без проблем. Тем не менее, у меня есть конкретный случай, который влечет за собой некоторые mod_rewriting.
У меня есть домен, такой как mydomain.com, и большое количество подимен, таких как sub.mydomain.com и sub2.mydomain.com. Все эти субдомены отображаются в соответствующие каталоги. Но субдомены также будут иметь полные домены верхнего уровня, которые сопоставляются с соответствующими каталогами. Например:
sub.mydomain.com будет отображаться в тот же каталог, что и awesomeproducts.com sub2.mydomain.com будет сопоставляться с тем же каталогом, что и widgets.com
Как лучше всего обеспечить бесперебойную работу обоих методов доступа к каждому сайту?
Поскольку в документах говорится только, что mod_rewrite не так "изящен", как mod_vhosts_alias, я не знал, должен ли я использовать mod_rewrite сам по себе для моей ситуации или мне следует каким-то образом пытаться смешать два подхода.
Смешивать их путь или это создаст проблемы?
1 ответ
Поведение RewriteRule и RewriteCond изменяется при использовании mod_vhost_alias. Прошло несколько дней с тех пор, как я возился с ним, поэтому я отрывочен, но следите за тем, как RewriteRule интерпретирует часть URL, которая должна быть переписана. Это может измениться при использовании mod_vhost_alias... и поведение RewriteCond также может измениться.
Чтобы решить вопрос, о котором я спрашивал, я использовал символические ссылки для реальных доменов. Я настроил несколько поддоменов со связанными папками, чтобы sub1.stddomain.com перешел в папку sub1.stdomain.com. Затем я добавил символическую ссылку, которая отображает domain1.com в папку sub1.stddomain.com. Таким образом, любой, кто посещает domain1.com, отображается на сайте в папке sub1.stddomain.com.
ВАЖНО: После всей этой работы и тестирования я вернулся к коллекции файлов virtualhost БЕЗ mod_vhost_alias. Оказывается, существует известная проблема с mod_vhost_alias. DocumentRoot неправильно установлен при его использовании. Это ломает тонны скриптов. Это было исправлено в феврале 2012 года с новыми специальными переменными, и команда программистов в Apache бросила мяч. Они никогда не писали никакой документации, объясняющей, как использовать патч или новые переменные.
Я снова открыл проблему и заявил, что это все еще ошибка, так как вы не можете написать код и никому не сказать, как его использовать, а затем назвать его исправленным. К сожалению, эта проблема уже игнорировалась в течение ГОДОВ, и, вероятно, она будет и впредь игнорироваться, даже если они предположительно написали код для нее.
РЕКОМЕНДУЕМЫЙ УРОК ИЗ ВСЕГО ЭТОГО: Не используйте mod_vhost_alias. Написание сценариев оболочки для управления файлами vhost с использованием еще одного файла шаблона.