【发布时间】:2018-07-10 09:50:33
【问题描述】:
场景:我已经将一个 WordPress 网站移动到一个新域,并希望将所有页面从旧域 301 重定向到新域。两个站点都在运行 Apache 的同一个托管帐户上。旧站点位于根级别 (public_html),新站点位于子文件夹中(根目录下方/内部)。
我已经成功地完成了这项工作,但我想了解并了解它为什么有效。下面是我的“旅程”和解决方案的快速概述,以及三个具体问题。
首先我尝试像这样进行重定向(代码添加到根 .htaccess 文件中):
# 301 Page Redirects - not working - causes redirect loop
redirect 301 / https://new-domain.com/
redirect 301 /services/ https://new-domain.com/services/
redirect 301 /recipes/ https://new-domain.com/recipes/
但这会导致重定向循环。我猜是因为具有这些规则的 .htaccess 文件位于根级别,因此也会影响子文件夹。
问题 1:我上面关于重定向循环原因的假设是否正确?
然后我尝试更具体,并将此代码放在根 .htaccess 文件中:
# 301 Page Redirects - not working - does nothing at all - not sure why
redirect 301 https://old-domain.com/ https://new-domain.com/
redirect 301 https://old-domain.com/services/ https://new-domain.com/services/
redirect 301 https://old-domain.com/recipes/ https://new-domain.com/recipes/
我希望上面的代码可以解决问题,因为它更具体地描述了旧域。我的想法是它准确地指定了旧域,因此可以绕过重定向循环。但相反,这段代码似乎根本没有效果。重定向循环消失了,但现在根本不再发生重定向。
问题 2:为什么上面的代码根本不会产生任何重定向?
然后我找到了this answer 并应用了其中的代码,它完美地工作并创建了所有重定向。另外,它比我之前的尝试优雅得多。这是代码:
# 301 Redirects from old-domain.com to new-domain.com - THIS CODE WORKS - Yay!
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old-domain.com$
RewriteRule (.*)$ https://new-domain.com/$1 [R=301,L]
问题 3:为什么我将这段代码放在根 .htaccess 中时不会导致任何重定向循环?
我意识到我正在复制/粘贴代码,但没有完全理解它的工作原理。因此,我希望对这些行为进行简单的解释。谢谢。
【问题讨论】:
-
新旧网站内容不同吗?
-
新旧站点是完全复制的。所以这实际上是域的变化。
标签: apache .htaccess redirect redirect-loop