You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自托管WordPress博客旧链接跳转新链接的.htaccess配置问题

解决WordPress旧链接到新链接的Apache重定向问题

我来帮你搞定这个无缝重定向的需求!你的旧链接是带日期的/index.php/yyyy/mm/dd/title-of-post,要转到简洁的/title-of-post/,用Apache的RewriteRule完全可以实现,关键是要把规则放在正确的位置,并且匹配逻辑准确。

具体的重定向规则

首先,在你的.htaccess文件中添加这条规则,一定要放在WordPress默认规则的前面(也就是# BEGIN WordPress注释块之前):

RewriteEngine On
RewriteRule ^index.php/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$ /$1/ [R=301,L]

规则解释

  • ^index.php/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$:精准匹配旧链接的结构——以index.php/开头,接着4位数字的年份、2位的月份、2位的日期,最后捕获标题部分到变量$1。
  • /$$1/:重定向到根目录下的标题路径,结尾加上斜杠,和你的新链接格式保持一致。
  • R=301:永久重定向,告诉搜索引擎更新索引,同时让浏览器缓存这个重定向关系,避免重复跳转。
  • L:标记为最后一条规则,匹配到旧链接后就不再执行后面的规则,提升效率。

完整的.htaccess示例

把规则放在WordPress默认规则之前,整个文件大概是这样:

# 旧链接到新链接的永久重定向
RewriteEngine On
RewriteRule ^index.php/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$ /$1/ [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

注意事项和排查点

  1. 确保mod_rewrite开启:这个模块是Apache重定向的基础,如果没开启,规则完全不会生效。你可以通过phpinfo()页面查看,或者联系你的主机服务商确认。
  2. 权限设置正确:.htaccess文件的权限一般设为644,确保Apache服务器能够读取它。
  3. 测试重定向:可以直接在浏览器输入旧链接,看是否自动跳转到新链接;也可以用命令行测试:
    curl -I https://domain.tld/index.php/2024/05/20/your-old-post-title
    
    查看返回的Location响应头,确认是否指向正确的新链接。
  4. WordPress固定链接设置:确保你已经在WordPress后台把固定链接设置为「自定义结构」,并填入/%postname%/,这样新链接才能正常工作。

这样配置后,旧书签和搜索引擎里的旧链接都会自动跳转到新链接,完全不会出现404页面啦!

内容的提问来源于stack exchange,提问作者Brandon Nolet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:54:23