Исключить определенные домены из Apache2 serverAlias ​​при использовании псевдонима catch all *(подстановочный знак)

У меня есть веб-приложение, которое должно поддерживать пользовательские домены, поэтому я настроил следующий виртуальный сервер на основе имен:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    RackEnv production
    DocumentRoot /srv/www/example/current/public
    <Directory /srv/www/example/current/public>
             AllowOverride all
             Options -MultiViews FollowSymLinks
    </Directory>
    ErrorLog /srv/www/example/log/error.log
    TransferLog /srv/www/example/log/access.log
</VirtualHost>

Заметьте * как псевдоним сервера? который ловит все домены на этом сервере. Однако на этом сервере есть другие сайты, которые я хочу исключить из этого списка. Для меня более экономично иметь список исключенных доменов, чем устанавливать вручную каждый домен, в котором пользователь может зарегистрироваться в этом сервисе как serverAlias ​​...

Возможно, это не лучший способ, но я ищу помощь в лучшем (относительно простом) способе настройки веб-приложения, которое может перехватывать любые домены, в то же время позволяя другим конкретным доменам перенаправляться в другие приложения.,

1 ответ

Решение

Apache ищет совпадения в порядке определения доменов. Если я правильно понимаю вашу проблему, то ее можно решить, определив, какие хосты должны быть исключены до перехвата всех хостов.

<VirtualHost *:80>
    ServerName excluded.example.com
    ServerAlias  something.example.com ...
    ...
</VirtualHost>
<VirtualHost *:80>
    ServerName example.com
    ServerAlias * *.example.com www.example.com example.com
    RailsEnv production
    ...
</VirtualHost>
Другие вопросы по тегам