我目前正在处理一个特殊配置的网站大修:这2个网站托管在2个不同的服务器上,并为新网站提供新的域名。 新域现在处于联机状态,因此我必须从Apache 2.2.16上运行的旧服务器重定向旧域。
因此,我必须将旧域主页重定向到新的域主页,如下所示:
http://www.oldwebsite.com > http://www.newwebsite.com
与此同时,我必须逐个重新定向旧网址(针对搜索引擎优化的目的,因为新的网址已经过优化),如下所示:
http://www.oldwebsite.com/page1/ > http://www.newwebsite.com/newpage1/
http://www.oldwebsite.com/page2/ > http://www.newwebsite.com/newpage2/
http://www.oldwebsite.com/page3/ > http://www.newwebsite.com/newpage3/
http://www.oldwebsite.com/directory1/ > http://www.newwebsite.com/newdirectory1/
http://www.oldwebsite.com/directory2/ > http://www.newwebsite.com/newdirectory2/
http://www.oldwebsite.com/directory3/ > http://www.newwebsite.com/newdirectory3/
Etc.
因此,我在旧服务器上放入了htaccess文件这些规则:
RewriteRule ^/?$ http://www.newwebsite.com/ [R=301,L]
RewriteRule ^page1$ http://www.newwebsite.com/newpage1/? [R=301,L]
RewriteRule ^page2$ http://www.newwebsite.com/newpage1/? [R=301,L]
RewriteRule ^directory1(.*)$ http://www.newwebsite.com/newdirectory1/? [R=301,L]
RewriteRule ^directory2(.*)$ http://www.newwebsite.com/newdirectory2/? [R=301,L]
RewriteRule ^directory3(.*)$ http://www.newwebsite.com/newdirectory3/? [R=301,L]
Etc.
注意:我添加了“?”在新网址的末尾,以防止旧参数的传输,以避免重复的内容。我听说这是在以前的Apache版本上实现它的方法。
当我这样做时,只有主页被重定向,而其他规则没有被遵循。 所以我通过将第一条规则推到最后来改变规则的顺序,如下所示:
RewriteRule ^page1$ http://www.newwebsite.com/newpage1/? [R=301,L]
RewriteRule ^page2$ http://www.newwebsite.com/newpage1/? [R=301,L]
RewriteRule ^directory1(.*)$ http://www.newwebsite.com/newdirectory1/? [R=301,L]
RewriteRule ^directory2(.*)$ http://www.newwebsite.com/newdirectory2/? [R=301,L]
RewriteRule ^directory3(.*)$ http://www.newwebsite.com/newdirectory3/? [R=301,L]
Etc.
RewriteRule ^/?$ http://www.newwebsite.com/ [R=301,L]
现在结果是,主页仍然被重定向,但其余网址以500错误状态响应。
有人知道我的文件中有什么问题吗? 非常感谢。
答案 0 :(得分:0)
找到可能解决您的问题的这篇文章
.htaccess 301 redirect path and all child-paths
使用以下代码行:
RewriteRule ^page1$ http://www.newdomain.com/ [R=301,L,QSA]
RewriteRule ^page1/(.*) http://www.newdomain.com/$1 [R=301,L,QSA]