WordPress改固定链接后旧URL404重定向失效解决方案
修改固定链接为/%category%/%postname%/结构后,不需要手动逐个修改历史文章链接,完全可以实现旧URL自动兼容/跳转到带分类路径的新URL。你之前配置Redirection插件规则不生效,基本都是规则匹配逻辑、优先级或者缓存问题,以下是可直接落地的方案:
优先方案:修正Redirection插件配置(零代码)
不要直接写全路径通配符跳转,这种规则会把首页、独立页面、分类归档、静态资源路径全部打乱,自然会失效。正确配置逻辑:- 把文章跳转规则调整到所有重定向规则的最顶部,避免被其他404拦截规则优先匹配
- 开启插件自带的「WordPress slug 自动匹配」功能——这个功能本身就会自动识别请求对应的文章内容,你只需要额外加一层判断:如果请求是根路径下的单篇文章,就301跳转到该文章对应的带分类路径的新永久链接
- 排除不需要跳转的路径:
/wp-admin/、/wp-content/、已有的分类归档路径、独立页面slug路径,这些请求直接走原有逻辑不处理 - 配置完一定要清空站点缓存、浏览器缓存再测试,80%的规则不生效问题都是缓存导致的,跳转类型选301永久重定向即可。
高性能方案:服务器层配置重定向
如果你有服务器配置权限,直接在Web服务层写规则比插件性能好很多,不会额外消耗PHP资源。以Nginx为例,只需要在站点配置里加一段重写逻辑:location / { try_files $uri $uri/ @old_post_redirect; } location @old_post_redirect { rewrite ^/([^/]+)/?$ /index.php?name=$1 permanent; }这段逻辑会先判断访问的路径是否是真实存在的文件/目录,如果不存在,就把根路径下的单段路径请求传给WordPress,WordPress会自动根据slug匹配到对应文章,跳转到你设置的带分类的新永久链接,不会影响其他路径的正常访问。
零风险过渡方案:新旧URL并行兼容
如果担心跳转规则漏判导致404,可以先不直接强制跳转,先加自定义重写规则让新旧URL都能正常访问对应文章:既支持/news/amazing-new-car这种新路径打开文章,也支持/amazing-new-car这种旧路径打开文章。等运行1-2个月,搜索引擎完成新链接收录、分发出去的旧链接流量基本消化后,再开启301跳转,完全切换到新URL结构,容错率最高。
注意:不要用批量替换数据库内容的方式改旧链接,很容易把文章正文、序列化配置里的内容改坏,用重定向的方式是成本最低、风险最小的方案。
内容的提问来源于stack exchange,提问作者Jorge Bernal

