2013-09-26 29 views
0

Apache为我的主VirtualHost项忽略ServerName和ServerAlias。Apache忽略ServerName和ServerAlias - 使用优先级运行

我的情景:

- main domain is "one.com" (just an example) 
- secondary domains are several, pointing to the same IP of "one.com", but they need 
to be in a different VirtualHost entry, so I can redirect to "one.com" using PHP 
(I want to log redirects). 

所以,我所做的:

<VirtualHost 208.1.2.3:80> 
    DocumentRoot /sites/redir 
    ErrorLog logs/redir-error_log 
    CustomLog logs/redir-access_log common 
    ErrorDocument 404 /index.php 
</VirtualHost> 

<VirtualHost 208.1.2.3:80> 
    DocumentRoot /sites/main 
    ServerName one.com 
    ServerAlias www.one.com 
    DirectoryIndex index.html index.php 
    ErrorLog logs/main-error_log 
    CustomLog logs/main-access_log common 
</VirtualHost> 

由于优先级的one.com将使用中的第一项不同的任何域,不具有服务器名称,也没有ServerAlias 。

问题:所有请求都会转到第一个条目,包括one.com和www.one.com,这会导致无限循环,因为我的PHP脚本会重定向到one.com。如果我反转块,所有请求都转到“主”条目...

我需要的是,one.com和www.one.com运行在/ sites/main中,其他域转到/ sites/redir被重定向到“one.com”条目。

任何想法?

谢谢。 Arvy

回答

5

已解决。

问题是,第一个“全局”条目NEEDS ServerName参数。你不需要通知一个有效的条目,只需要一些东西,比如“ServerName mask.one.com”。这样,将第一个条目作为“通用”一个,第二个条目与有效的域(在我的案例中为one.com)进行匹配。未列出的任何域都将使用优先级,因此将像“mask.one.com”一样运行。

<VirtualHost 208.1.2.3:80> 
    DocumentRoot /sites/redir 
    ServerName redir.one.com 
    ErrorLog logs/redir-error_log 
    CustomLog logs/redir-access_log common 
    ErrorDocument 404 /index.php 
</VirtualHost> 

<VirtualHost 208.1.2.3:80> 
    DocumentRoot /sites/main 
    ServerName one.com 
    ServerAlias www.one.com 
    DirectoryIndex index.html index.php 
    ErrorLog logs/main-error_log 
    CustomLog logs/main-access_log common 
</VirtualHost>