在使用捕获所有 *(通配符)别名时从 Apache2 serverAlias 中排除特定域

Vic*_*r S 12 wildcard serveralias apache-2.2

我有一个需要支持自定义域的 Web 应用程序,在这方面,我设置了以下基于名称的虚拟服务器:

<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>
Run Code Online (Sandbox Code Playgroud)

注意到 * 作为服务器别名了吗?捕获该服务器上的所有域。但是,我希望从该列表中排除此服务器上的其他站点。对我来说,拥有一个排除域列表比手动将用户可能在此服务注册的每个域设置为 serverAlias 更经济...

也许这不是最好的方法,但我正在寻求帮助,以最好(相对简单)的方式来设置可以捕获任何域的网络应用程序,同时允许将其他特定域路由到不同的应用程序.

use*_*517 14

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>
Run Code Online (Sandbox Code Playgroud)