我正在使用Apache,并希望使用虚拟主机将所有子域名和非www地址redirect到www版本。
这个规则唯一的例外是,我希望media.domain.com指向www.domain.com相同的位置,因为我想要一个不同的,无cookie的图像和video域位于..(速度)。
下面的代码不是工作。 如何实现这一目标呢?
<VirtualHost *:80> ServerName www.domain.com ServerAlias www.domain.com media.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain.com </VirtualHost> <VirtualHost *:80> ServerName domain.com ServerAlias domain.com Redirect permanent / http://www.domain.com/ </VirtualHost>
有几种方法可以做到这一点,这取决于这是否是服务器上唯一的域名。
您可以在ServerAlias中使用通配符来捕获所有像下面这样的域
<VirtualHost *:80> ServerName www.domain.com ServerAlias www.domain.com media.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain.com </VirtualHost> <VirtualHost *:80> ServerName domain.com ServerAlias *.domain.com domain.com Redirect permanent / http://www.domain.com/ </VirtualHost>
如果这是服务器上的唯一域,那么您可以使用默认的虚拟主机
<VirtualHost *:80> ServerName www.domain.com ServerAlias www.domain.com media.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain.com </VirtualHost> <VirtualHost _default_:80> ServerName domain.com Redirect permanent / http://www.domain.com/ </VirtualHost>
在这两种情况下,默认或通配符都将匹配,除非有更具体的虚拟主机。
您可以尝试回复评论。
<VirtualHost *:80> ServerName www.domain.com ServerAlias www.domain.com media.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain.com </VirtualHost> <VirtualHost *:80> ServerName media.domain.com ServerAlias media.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain.com </VirtualHost> <VirtualHost *:80> ServerName domain.com ServerAlias *.domain.com domain.com Redirect permanent / http://www.domain.com/ </VirtualHost>