当用户通过 url 访问我的网站时:
example.com/post-name
Wordpress 应执行 301 重定向到:
example.com/post-name/
但是由于 WP Rocket 缓存插件,它不起作用 (我无法找出为什么会发生这种情况,但 WP Rocket 肯定会导致问题)
可以对带有斜杠的 url 执行 wp_redirect 吗? 除了.htaccess重定向还有其他解决方案吗?
为了防止 WordPress 和/或插件的任何干预,您可以尝试通过 .htaccess (Apache) 强制使用尾部斜杠:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !/wp-json/ [NC]
RewriteCond %{REQUEST_URI} !/wp-admin/ [NC]
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*[^\/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>
RewriteRule 通过 mod_rewrite(如果启用)匹配任何不带尾部斜杠的路径,并重定向到带尾部斜杠的同一路径。
RewriteCond 排除
/wp-json/
和 wp-admin/
文件夹中的路径,以及带点的路径,表示带有扩展名的文件(例如 .jpg
、.css
等)。
在
/wp-json/
和 wp-admin/
文件夹中强制添加尾部斜杠可能会导致 WordPress 管理面板和全站编辑出现问题。
对于那些对已接受的答案不完全满意的人(我也投了赞成票,因为这是一个正确的解决方案,但不是完整的解决方案)。
那么,.htaccess 重定向有什么问题呢?
您可能注意到,对于某些事件 (https://docs.wp-rocket.me/article/1648-when-wp-rocket-writes-to-the-htaccess-file) .htaccess 相关代码将通过以下方式重新生成WP-火箭。丑陋的部分是 Wp-Rocket 总是将其代码写在 .htaccess 的第一行
# BEGIN WP Rocket v3.15.9
WP-Rocket codes
# END WP Rocket
... all the other current .htaccess content
所以,你可以想象每次发生这种情况时,你的尾部斜杠代码都会跟在 WP-Rocket 代码后面,这意味着它不再起作用了。
好消息是 WP-Rocket 在这里解决了这个问题(https://docs.wp-rocket.me/article/131-redirection-to-enforce-trailing-slash-on-urls)。
附注我花了一些时间找到完整的解决方案并更新了这个问题,这样您就可以节省时间。请毫不犹豫地投票以帮助其他人看到这一点。