使用虚拟主机进行域名重定向

使用虚拟主机进行域名重定向

我已经设置了一个域名,我想将该域名指向不同的网络服务器。

可以说:

域 1:服务器 1 上的 www.test.com

域 2:服务器 2 上的 www.test1.com

我想将 www.test1.com 转发到 www.test.com,并且我已尝试通过在服务器 2 上设置虚拟主机和 mod_rewrite 来实现此目的。

虚拟主机如下所示:

   <virtualhost XXX.XXX.XXX.XXX:80>
            ServerName   www.test1.com
            ServerAlias  test1.com *.test1.com    
            RewriteEngine On
            RewriteCond %{HTTP_HOST} (.*)\test\.com
            RewriteRule ^(.*) http://%1test.com/$1 [R=301,L]
    </VirtualHost>

一切正常,除了http://test1.com不重定向。

问题 1: 我将如何重定向所有进入的请求(子域所有内容) http://test1.comhttp://www.test.com使用 mod_rewrite。

问题2:在这种情况下,我是否需要为虚拟主机指定一个目录?

问题 3:我是否需要 ServerAlias 或者它在这里会适得其反?

更新:

最终使用以下设置执行了 301

<virtualhost <ip>:80>
        ServerName   test1.com
        ServerAlias  www.test1.com
        Redirect 301 / http://www.test.com
</VirtualHost>

答案1

DocumentRoot 不是必需的。您可以像这样设置 vhost,不会出现任何问题:

 <VirtualHost xx.xx.xx.xx:90>
  ServerName domain.tld
  ServerAlias www.domain.tld
  RedirectPermanent / http://www.domain2.com/
 </VirtualHost>

这会将所有请求重定向到主站点以及子文件夹。例如 www.domain.tld/foo/bar 将重定向到 www.domain2.com/foo/bar

仅当您需要多个主机名时才需要 ServerAlias。例如,同时包含 www 和不包含 www。

答案2

您在示例配置中混淆了 .com 和 .de。这可能是问题所在吗?

问题 1:

RewriteCond %{HTTP_HOST} ^.*\.test1\.de [NC]
RewriteRule ^(.*)$ http://www.test.de/$1 [L,R=301]

问题 2:
我不能 100% 确定是否需要 DocumentRoot,但我认为不需要。

问题 3:是的,您需要 *.test1.com 别名。
如果此 VirtualHost 是您的第一个 VirtualHost,则可能无需它即可工作。
然后它将获取与任何其他 VirtualHost 不匹配的所有请求,因为它是默认的。
但是,配置它更简洁。

答案3

在您的虚拟主机中尝试类似的操作:

<Virtualhost XXX.XXX.XXX.XXX:80>    
     ServerName www.test1.com
     ServerAlias *.test1.com
     Redirect 301 / http://www.test.com
</VirtualHost>

非常基础,无论用户尝试从 test1.com 访问到 test.com 的哪个 URL,都应该传输任何内容。

相关内容