301 将所有子页面重定向到父页面,但将少数子页面重定向到整个网站的其他页面

301 将所有子页面重定向到父页面,但将少数子页面重定向到整个网站的其他页面

我该如何将所有子页面 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.comwww.example.com),那么你不一定需要在中指定绝对 URL代换例如,您可以使用根相对路径并简化指令以使其如下:

# Generic redirect last
RewriteRule ^(parent-page/). /$1 [R=301,L]

ETC。

相关内容