在 apache/centos web 服务器上重定向页面的最佳方法

在 apache/centos web 服务器上重定向页面的最佳方法

我有一个 centos 6.5 网络服务器,使用虚拟主机在 1 个 IP 地址上运行 2 个网站。

domain1.com 和 domain2.com - 都托管在上述同一个 Web 服务器上。

我需要将大约 40 个页面从域 1 重定向到域 2,“例如”:

domain1.com/page1 -> domain2.com/new-page-1
domain1.com/welcomepage -> domain2.com/new-welcome-page
domain1.com/johnsmith -> domain2.com/elvis
domain1.com/test -> domain2.com/production

*请注意,我重定向的页面不在同一结构/名称下,而是转到完全不同的结构/名称。

有人能建议我可以/需要做什么来完成这项任务吗?

编辑 #1 我尝试通过 httpd.conf 文件中的 VirtualHost 部分执行此操作。请参阅下面的条目。

<VirtualHost *:80>
 ServerName domain1.com
 ServerAlias www.domain1.com
 RedirectPermanent / http://www.domain2.com/page12345/
</VirtualHost>

<VirtualHost *:80>
 ServerName domain1.com
 ServerAlias www.domain1.com
 RedirectPermanent /AboutUs/Founders http://www.domain2.com/about-us-founders/
</VirtualHost>

在上述两个条目中,只有第一个条目正常工作并正确重定向。第二个条目重定向到:http://www.domain2.com/page12345/AboutUs/Founders 有任何想法吗?

答案1

在这种情况下,最简单的解决方案往往是最好的;增加 40重定向指令到 domain1 VirtualHost 配置,其中您唯一需要做的选择是重定向的永久或临时状态:

<VirtualHost *:80>
   Servername domain1.com
   RedirectTemp /page1 http://domain2.com/new-page-1
   RedirectPermanent /welcomepage http://domain2.com/new-welcome-page
</VirtualHost>

回应上面的编辑#1:


当在 ServerName 或 ServerAlias 中使用具有相同域名的多个 VirtualHost 节时,只有第一个有效,后续的将被忽略。

单个 VirtualHost 节可​​以包含多个 Redirect 指令,因此将第二个 Redirect 指令移动到第一个 virtualhost 节并删除第二个。

第二阅读上面链接中的手册 确实有帮助

任何以 URL-path 开头的请求都会在目标 URL 的位置向客户端返回重定向请求。匹配的 URL-path 以外的其他路径信息将附加到目标 URL。
例子: Redirect /service http://foo2.example.com/service
如果客户要求http://example.com/service/foo.txt,它将被告知访问http://foo2.example.com/service/foo.txt

这与您对 www.domain1.com/AboutUs/Founders 的请求所观察到的情况完全一致,触发RedirectPermanent / http://www.domain2.com/page12345/将原始请求重定向到 www.domain2.com/page12345/AboutUs/Founders

您可以通过正确排序 Redirect 行来解决此问题,因为 Apache 将按顺序处理 Redirect 指令。从最长的 URL 路径开始,否则它们会被较短目录上的有效重定向捕获。

<VirtualHost *:80>
   Servername domain1.com
   Redirect /AboutUs/Founders http://www.domain2.com/about-us-founders/
   Redirect /AboutUs/         http://www.domain2.com/about-us/
   Redirect /index.html       http://www.domain2.com/page12345/
   RedirectMatch ^            http://www.domain2.com/page12345/
</VirtualHost>

对于仅包含以下内容的重定向请求http://domain1.com^ 经常使用/,最好也明确地重定向 IndexDocument,因此 /index.html 条目。

相关内容