Apache VirtualHosts

时间:2013-01-09 00:39:04

标签: apache

如果apache被提供域名origin.datingasia.co,它是否会匹配以下VirtualHost条目?

<VirtualHost *:80>
    ServerName datingasia.co
    ServerAlias www.datingasia.co
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*) http://www.%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/html/datingasia.co
    ServerName origin.datingasia.co
    ServerAlias origin.datingasia.co
</VirtualHost>

此外,一旦域名应用了重写规则 - 例如:添加了“http://www.etc.etct”,它会自动重定向吗?会在使用DocumentRoot路径之前发生吗?

1 个答案:

答案 0 :(得分:1)

仅为域“origin.datingasia.co”触发第二个条目。如果您希望第一个触发它,则需要添加第二个ServerAlias参数。

ServerAlias origin.datingasia.co

这会导致问题,因为您的第二个条目包含相同的ServerAlias。所有ServerName / ServerAlias必须是唯一的,否则Apache将不知道用于请求的块。

第一个条目只会捕获“datingasia.co”和“www.datingasia.co”的请求。如果不符合重写规则条件,您就错过了DocuemntRoot(IE:www.datingasia.co)。这将导致您的请求一旦到达www.datingasia.co页面就会失败,因为Apache无法知道从哪个root用户提供请求。当访问“datingasia.co”时,浏览器将自动重定向到“www.datingasia.co”。

对于第二个条目,您不需要“ServerAlias origin.datingasia.co”,因为您已经在ServerName中定义了该域。如果您想要一个额外的唯一域指向该主机(IE:ServerAlias www.origin.datingasia.co),您只需要ServerAlias行。

由于您的重写规则在主机中,如果满足条件,Apache将不需要DocumentRoot。但是如果不满足条件,Apache将尝试提供请求,因此需要DocumentRoot。您的规则会将“datingasia.co”转发给“www.datingasia.co”,但会在“www.datingasia.co”失败,因为它缺少DocumentRoot并且不符合RewriteCond。