将非 www 域名和所有其他子域名重定向到 www,media.domain.com 除外

将非 www 域名和所有其他子域名重定向到 www,media.domain.com 除外

我正在使用 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>

相关内容