我已经设置了一个域名,我想将该域名指向不同的网络服务器。
可以说:
域 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.com到http://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,都应该传输任何内容。