0

如果 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 路径之前发生吗?

4

1 回答 1

1

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

ServerAlias origin.datingasia.co

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

第一个条目只会捕获对“datingasia.co”和“www.datingasia.co”的请求。但是,如果不满足重写规则条件(即:www.datingasia.co),您会丢失 DocuemntRoot。一旦他们到达 www.datingasia.co 页面,这将导致您的请求失败,因为 Apache 将不知道从哪个 root 服务请求。当他们访问“datingasia.co”时,浏览器将自动重定向到“www.datingasia.co”。

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

Since your rewrite rules are in the host, if the condition is met Apache will not need the DocumentRoot. But if the condition is not met, Apache will attempt to serve the request and as a result will require the DocumentRoot. Your rule will forward "datingasia.co" to "www.datingasia.co" but will fail at "www.datingasia.co" because it is missing the DocumentRoot and does not meet the RewriteCond.

于 2013-01-09T00:57:48.467 回答