ServerAlias名称

时间:2011-03-06 08:27:49

标签: .htaccess mod-rewrite

我想在httpd.conf的服务器别名中添加一个异常,例如不是xx.com。

由于 让

1 个答案:

答案 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>