我想在httpd.conf的服务器别名中添加一个异常,例如不是xx.com。
由于 让
答案 0 :(得分:2)
据我所知,ServerAlias一次只匹配一个域。添加异常的唯一方法是ServerAlias不是该域。
如果您不希望VirtualHost与xx.com匹配,那么请不要将ServerAlias xx.com
放入VirtualHost,您应该没问题吗?
我猜这不是你的问题,因为这很明显,所以让我猜猜你可能会问的其他事情:
如果你想要一种方法来做一个匹配多个域的通配符ServerAlias,你可能应该使用mod_rewrite而不是依赖Apache的VirtualHost有限解析。它非常强大且基于正则表达式,可以处理各种通配符和模式。
另一方面,如果您想在xx.com上为特定URL添加例外,并且只在不同的VirtualHost上指向该URL,那么也可以使用mod_rewrite完成。
简而言之,看看mod_rewrite,看看它是否可以帮助你做你需要做的事。
在我看来,您可能会混淆第一个VirtualHost的行为。第一个VirtualHost 始终是默认值。如果没有其他VirtualHost匹配,则第一个将始终用于Apache接收的任何域。从默认VirtualHost中“排除”域的唯一方法是添加自己的特定VirtualHost来捕获它。无论如何,mod_rewrite也可能在这里成为你的朋友。
编辑:这是我的VirtualHost配置的片段,也许这可以帮助您了解我告诉您要做的事情:
<VirtualHost *:80>
# This is the default VirtualHost, because it is listed first.
# All domain names that are not recognized elsewhere go here
# automatically. All this VirtualHost does is to display a simple
# HTML page informing users that no site exists at that address.
# ServerName/Alias doesn't matter, because it's not a real vhost
ServerName default-vhost.mysite.net
DocumentRoot /var/www/nosite
# In case someone goes to http://unknownsite.com/something/else.html
# make sure they get the "no site" message, so redirect all URLs.
RewriteEngine On
RewriteRule ^/(..*) /index.html [NS]
</VirtualHost>
<VirtualHost *:80>
# This is my real website. Because it is listed second, it will ONLY
# be accessible from hostnames listed as ServerName or ServerAlias
ServerName mysite.net
DocumentRoot /var/www/mysite
</VirtualHost>