使用catch * *(通配符)别名时,从Apache2 serverAlias中排除特定域


10

我有一个需要支持自定义域的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>

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

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

Answers:


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>

1
是的,您是对的,但是我对如何在默认的Ubuntu 10.4堆栈上执行此操作感到困惑,在该堆栈上,整个恶作剧都是通过拥有可用站点和启用站点的目录来管理的,并且每个虚拟主机定义都以其自己的独占方式存在文件...在这种情况下如何控制顺序?
Victor S

这些文件以字母顺序(ls的默认排序顺序)加载。
2011年

1
对于需要首先出现的网站定义,请000-excluded.example.com.conf在网站可用目录中为其命名。
Brian Minton 2014年

我一直在想做完全相同的事情,但这对我不起作用。具有“ ServerName included.example.com \ n Redirect / example.com/excluded ”的exclude.example.com VirtualHost导致对更通用VirtualHost的所有请求都被重定向(肯定遵循配置中的特定VirtualHost)。
quuxman'8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.