我有一个centos 6.5 web服务器运行2个网站closures1 ip地址通过使用虚拟主机。
domain1.com和domain2.com – 都托pipe在上面的同一个Web服务器上。
我需要将约40页从domain1redirect到domain2,“例如”:
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
*请注意,我正在redirect的页面不在同一个结构/名称下,而是转到完全不同的结构/名称。
任何人都可以build议我可以/需要做什么来完成这项任务?
编辑#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>
在上面的两个条目中,只有第一个条目正确地工作并redirect。 第二个是redirect到: http : //www.domain2.com/page12345/AboutUs/Founders有什么想法?
如果在这种情况下经常是最好的解决scheme, 将40个redirect指令添加到domain1 VirtualHostconfiguration,其中您需要做的唯一select是在redirect的永久或临时状态:
<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指令移到第一个虚拟主机节并删除第二个。
第二次阅读上面的链接手册 确实有帮助 :
以URL-path开头的任何请求都会将redirect请求返回到目标URL位置的客户端。 超出匹配的URLpath的其他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/ ,将原始请求redirect到www.domain2.com/page12345/公司简介/创始人
您可以通过正确定购redirect行来解决这个问题,因为Apache将按顺序处理redirect指令。 从最长的URLpath开始,否则它们会被较短目录上的有效redirect捕获。
<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>
对于redirect只包含http://domain1.com的请求,您使用^而不是/经常这样做也是明确redirectIndexDocument以及/index.html条目的一个好主意。