Для начала мы хотели запросить *.example.com
быть обработанным соответствующим /var/www/*/
каталог, и мы получили это, используя mod_vhost_alias
с участием VirtualDocumentRoot
, следующим образом:
<VirtualHost *:80>
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1/
</VirtualHost>
Теперь мы хотим расширить эту общую конфигурацию, применив одни и те же правила RewriteRules ко всем поддоменам / каталогам - из конфигурации vhost. <Directory>
блок - но мы не знаем, как ссылаться на поддомен / каталог.
В основном мы пытаемся сделать что-то вроде этого (обратите внимание на использование% 1, которое в данном случае не работает):
<VirtualHost *:80>
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1/
<Directory /var/www/%1>
RewriteEngine on
RewriteRule ^about/?$ index.php?view=about
RewriteRule ^settings/?$ index.php?view=settings
RewriteRule ^support/?$ index.php?view=support
</Directory>
</VirtualHost>
Возможно ли что-то подобное?
Спасибо.
Хорошо, нам удалось заставить это работать. Все, что требовалось, - это небольшая настройка <Directory>
путь (а именно использование подстановочного знака * вместо% 1), удаление символов ^ в шаблонах RewriteRules и добавление ведущего / в строки подстановки:
<VirtualHost *:80>
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1/
<Directory /var/www/*>
RewriteEngine on
RewriteRule about/?$ /index.php?view=about
RewriteRule settings/?$ /index.php?view=settings
RewriteRule support/?$ /index.php?view=support
</Directory>
</VirtualHost>
Теперь ради соблюдения политики ServerFault (а также индексации Google) я отмечаю этот вопрос как ответ, но должен подчеркнуть, что мы не смогли бы сделать это без терпеливой помощи со стороны большие пальцы в #httpd на irc.freenode.net
Не беспокойтесь о <Directory>
в таком случае.
<VirtualHost *:80>
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1/
RewriteEngine on
RewriteRule ^/about/?$ /index.php?view=about
RewriteRule ^/settings/?$ /index.php?view=settings
RewriteRule ^/support/?$ /index.php?view=support
</VirtualHost>
Если у вас есть что-то кроме Rewrite
что необходимо сделать, например, контроль доступа, добавить <Location>
блок вместо <Directory>
блок:
<Location />
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
</Location>