Назад | Перейти на главную страницу

Apache conf: how to specify subdomain in <directory path="" to="" subdomain=""> при использовании mod_vhost_alias для виртуальных хостов с подстановочными знаками</directory>

Для начала мы хотели запросить *.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>