更改了固定链接结构。需要帮助重定向旧帖子

时间:2021-07-01 作者:user208459

我刚刚更改了我网站的URL结构,希望旧的URL能够转发到新的URL,而无需使用重定向插件。

旧结构:

/%category%/%year%/%day%/%postname%/
新建:

/%postname%/
谁能告诉我重定向的正则表达式代码,我可以在.htaccess 文件

P、 我尝试了yoast代码再生器,它将旧的URL重定向到新的URL,而不使用尾随斜杠,然后使用尾随斜杠再次重定向。因此,它生成了2个重定向,而不是一个重定向。

我不知道.htaccess 需要代码,并且以下Yoast permalink生成器代码似乎会导致重定向链问题:

RedirectMatch 301 ^/([^/]+)/([0-9]{4})/([0-9]{2})/([^/]+)/$ https://www.example.com/$4
我想知道如何更正此代码,以便将其插入.htaccess 文件谢谢

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

。。。它将旧URL重定向到新URL,但不使用尾随斜杠,然后使用尾随斜杠再次重定向。因此,它生成了2个重定向,而不是一个重定向。

RedirectMatch 301 ^/([^/]+)/([0-9]{4})/([0-9]{2})/([^/]+)/$ https://www.example.com/$4
在这种情况下,您应该能够在上述指令(由yoast生成)中向目标URL添加一个尾部斜杠。ie。/$4/ 而不是/$4. 您看到的第二个重定向,即附加尾部斜杠的重定向,正在由其他对象执行。

例如,完整的指令是:

RedirectMatch 301 ^/([^/]+)/([0-9]{4})/([0-9]{2})/([^/]+)/$ https://www.example.com/$4/
测试之前,您需要清除浏览器缓存。最好使用302(临时)重定向进行测试,以避免潜在的缓存问题(即更改301302 在上述指令的第一个参数中。)

然而,上述指令可以简化。由于只需要捕获最后一个路径段,因此可以避免在regex(第二个参数)中使用带括号的子模式。例如:

RedirectMatch 301 ^/[^/]+/\\d{4}/\\d{2}/([^/]+)/$ https://www.example.com/$1/
The\\d 速记字符类与[0-9]. 由于我们只捕获postname(第四路径段),因此我们使用$1, 不$4 在目标URL中。

使用mod\\u rewrite代替RedirectMatch 指令(mod\\u别名的一部分)是在mod\\u重写(由WordPress代码块使用)之后处理的,因此理想情况下,您应该在此处使用mod\\u重写,以避免意外冲突(而且效率会稍微提高)。

例如,代替上述RedirectMatch, 使用以下mod\\u重写RewriteRule 指令位于.htaccess 文件之前的# BEGIN WordPress 第节:

RewriteRule ^[^/]+/\\d{4}/\\d{2}/([^/]+)/$ https://www.example.com/$1/ [R=301,L]
只是要强调一下,以上RewriteRule 指令必须接近.htaccess 文件,在WordPress前端控制器之前,否则它将永远不会被处理。鉴于早期RedirectMatch 指令,除非您有其他mod\\u别名,否则顺序并不重要(它可以出现在WordPress前端控制器之后)Redirect 和/或RedirectMatch 指令。

<小时/>

UPDATE:

如果访问原始url时没有尾部斜杠,则不会将其转发到新url

通过在斜杠后面加上? (前面的元素出现0或1次)。例如:

RewriteRule ^[^/]+/\\d{4}/\\d{2}/([^/]+)/?$ https://www.example.com/$1/ [R=301,L]
因此,现在它匹配带有或不带尾部斜杠的URL,并重定向到始终包含尾部斜杠。

相关推荐

HTAccess重定向-替换特殊字符

在我的previous post, 我问过如何301重定向所有.com/language/X URL到.com/members/?members_search=X 使用htaccess。谢天谢地,我得到了帮助,解决办法是RewriteRule ^language/(.*) /members/?members_search=$1 [R=301,L]我刚刚发现,我还需要将任何现有连字符转换为空格。我假设不会有超过2个连字符。测试用例http://example.com/language/american-en