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

Установите псевдоним Apache для определенного ServerAlias

В настоящее время у меня VirtualHost определен так:

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias otherdomain.com
    DocumentRoot /var/www/project/
</VirtualHost>

Как создать псевдоним, влияющий только на otherdomain.com домен:

Alias /sub /var/www/other

Так что:

http://otherdomain.com/sub -> /var/www/other
http://mydomain.com/sub -> /var/www/project/sub

Рассматриваемый VirtualHost на самом деле не так прост, поэтому я бы предпочел не создавать отдельные VirtualHosts только для этого. Есть ли какие-либо условные выражения или аналогичные, которые я могу использовать внутри VirtualHost? Что-то вроде:

<VirtualHost *:80>
    ...
    <If ServerName=otherdomain.com>
        Alias /sub /var/www/other
    </If>
</VirtualHost>

Нет, вы не можете использовать псевдоним в If.

If "%{HTTP_HOST}

несовместима с псевдонимом, его использование приведет к тому, что Apache не запустится и выдаст сообщение об ошибке:

Alias not allowed here

Вы должны создать еще один VirtualHost с соответствующим именем и настроить свой псевдоним.

Вот соответствующие фрагменты документации Apache:

http://httpd.apache.org/docs/trunk/mod/core.html#if

и

http://httpd.apache.org/docs/trunk/expr.html

В этом случае должно сработать что-то вроде этого:

<If "%{HTTP_HOST} == 'example.com'">
    Alias /sub /var/www/other
</If>

Я считаю, что вам понадобится Apache 2.2 или выше для функциональности «Если».