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

10

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

<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 ​​...

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

Виктор С
источник

Ответы:

12

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>
user9517
источник
1
Да, вы правы, но я озадачен тем, как сделать это в стеке Ubuntu 10.4 по умолчанию, где все махинации управляются с помощью доступных сайтов и сайтов с включенными каталогами, и каждое определение виртуального хоста существует в своем собственном эксклюзиве. файл ... как я могу контролировать порядок в этом случае?
Виктор С
Файлы загружаются в алфавитном порядке (порядок сортировки по умолчанию для ls).
user9517 20.11.11
1
для определения сайта, который должен стоять первым, назовите его как-то 000-excluded.example.com.confв каталоге сайтов.
Брайан Минтон
Я хотел сделать то же самое, и это не работает для меня. В исключенном.example.com VirtualHost с именем «ServerName exclude.example.com \ n Redirect / example.com/excluded » были перенаправлены все запросы к более общему VirtualHost (который определенно следовал за конкретным VirtualHost в конфигурации).
Quuxman