。。。它将旧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(临时)重定向进行测试,以避免潜在的缓存问题(即更改
301
到
302
在上述指令的第一个参数中。)
然而,上述指令可以简化。由于只需要捕获最后一个路径段,因此可以避免在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,并重定向到始终包含尾部斜杠。