重定向301不适用于Apache上的所有页面

时间:2014-06-12 14:25:15

标签: apache .htaccess redirect

我已经查看了许多示例和教程,如何在Apache上设置这些301重定向,并且无法弄清楚为什么只有第二个重定向工作:

Options +FollowSymlinks
RewriteEngine on

#doesn't work:
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^page-still-exists.htm$ "http://www.new.com/new-target-page.htm" [R=301,L]

#works:
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^page-does-no-longer-exist.htm$ "http://www.new.com/" [R=301,L]

#works:
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^folder/otherpage.htm$ "http://www.new.com/" [R=301,L]

#works:
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^/?$ "http://www.new.com/" [R=301,L]

#doesn't work:
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^somepage.htm$ "http://www.old.com/some-page.htm" [R=301,L]

我不知道为什么只有第二个工作正常。我能看到的唯一区别是,在第二种情况下旧网页上不再存在旧页面。但是,每当我想将任何仍然存在的页面从旧域重定向到新域时,旧域上的页面仍然会被使用。

任何输入都非常受欢迎,因为这让我疯狂了。)

编辑:我添加了完整的htaccess文件。

编辑2:所以我删除了几乎所有的重定向,目前我的htaccess看起来像这样:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^old\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.new\.com\/$1" [R=301,L]

唯一有效的重定向是从old.com到new.com的简单重定向。像old.com/page.htm这样的重定向到new.com甚至new.com/page.htm都不起作用。实际上我真的不知道这个重定向实际来自哪里...... 301真的可以这么复杂吗?

1 个答案:

答案 0 :(得分:0)

你能试试这个规则,看看它的表现如何:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]
RewriteRule ^page-still-exists\.htm$ http://www.new.com/new-target-page.htm [R=301,L,NC]