【发布时间】:2014-08-02 22:12:06
【问题描述】:
我已经查看了许多如何在 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真的可以这么复杂吗?
【问题讨论】:
-
这是唯一规则还是您有更多规则?
-
是的,还有一些其他的 RewriteRules 以相同的方式存在,还有一个规则可以将索引页面重定向到新域。
-
您可以编辑您的问题并发布您的完整 .htaccess 吗?
-
@anubhava 该问题现在包含完整的 htaccess 文件。感谢您的观看!
-
这里也有人问过这个问题:webmasters.stackexchange.com/questions/64841/…