我该如何将所有子页面 301 重定向到父页面,但除了少数子页面 301 重定向到整个网站的其他特定页面之外。
下面的操作可以将所有子页面重定向到父页面:
RewriteRule ^(parent-page/). https://www.example.com/$1 [R=301,L]
那么我该如何将上述父页面的特定子页面 301 重定向到网站上的其他页面?
将所有子页面重定向到父页面后,我尝试完成的 301 重定向示例:
301 Redirect /parent-page/one https://www.example.com/parent-page-two/one
答案1
301 Redirect /parent-page/one https://www.example.com/parent-page-two/one
(顺便说一下,应该是这样Redirect 301 ....
)
Redirect
但是,如果您已经使用 mod_rewrite(即)进行常规重定向,则不应使用 mod_alias指令RewriteRule
。mod_rewriteRewriteRule
将总是首先运行,不管您的指令的明显顺序如何。如果您已经在使用 mod_rewrite,则始终使用 mod_rewrite 进行重定向。
你应该使用更具体的RewriteRule
前您现有的“通用”RewriteRule
指令。更具体的指令应该放在首位,因为指令是按照从上到下的顺序处理的(在同一个模块内)。
例如:
# Enable the rewrite engine (mod_rewrite)
RewriteEngine On
# More specific redirects...
RewriteRule ^parent-page/one$ https://www.example.com/parent-page-two/one [R=301,L]
# Generic redirect last
RewriteRule ^(parent-page/). https://www.example.com/$1 [R=301,L]
您需要在测试之前清除浏览器缓存,因为任何错误的 301(永久)重定向都可能已被浏览器缓存。因此,通常更容易先使用 302(临时)重定向进行测试以避免缓存问题,并且只有在确认一切正常后才切换到 301(如果这是意图)。
但是,如果您尚未将 mod_rewrite 用于其他用途,那么您可以使用“更简单”的 mod_alias 来执行此操作。例如:
# More specific redirects...
RedirectMatch 301 ^/parent-page/one$ https://www.example.com/parent-page-two/one
# Generic redirect last
RedirectMatch 301 ^/(parent-page/). https://www.example.com/$1
但是不要混合使用 mod_alias 和 mod_rewrite 的重定向,因为可能会引发意外冲突。
请注意,mod_aliasRedirect
指令是前缀匹配,因此这可能适合或不适合您的情况。这取决于您是否有其他 URL开始 /parent-page/one
不应被重定向。
更新:如果你只有一个要重定向到的域名,并且已经规范化了方案(HTTP 或 HTTPS)和主机名(example.com
或www.example.com
),那么你不一定需要在中指定绝对 URL代换例如,您可以使用根相对路径并简化指令以使其如下:
# Generic redirect last
RewriteRule ^(parent-page/). /$1 [R=301,L]
ETC。