我正在使用 Apache,并希望使用虚拟主机将所有子域名和非 www 地址重定向到 www 版本。
这条规则的唯一例外是,我希望 media.domain.com 指向与 www.domain.com 相同的位置,因为我希望将图像和视频放置在一个不同的、无 cookie 的域上......(速度)。
但是下面的代码不起作用。如何实现这一点?
<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>
答案1
有几种方法可以做到这一点,取决于这是否是服务器上唯一的域。
您可以在 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>