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

修改category base导致permalinks失效问题排查与解决求助

解决Permalink结构改为/blog/%category%/%postname%/后出现404的问题

嘿,这个问题我之前帮不少开发者排查过,本质是WordPress重写规则的冲突导致的,我给你拆解原因和可行的解决办法:

为什么会出现404?

  • 重写规则冲突:当你把Category Base设为"blog",同时又想在Permalink结构里用/blog/作为固定前缀时,WordPress的内部规则会混乱——它会把/blog/既当成分类目录的入口,又当成文章URL的前缀,两者的重写规则打架,服务器找不到正确的文章路径,自然返回404。
  • 重写规则未同步更新:修改Permalink或Category Base后,有时候WordPress没有自动更新.htaccess(Apache)或Nginx配置里的重写规则,也会导致URL解析失败。

我推荐两种方法,优先选第一种,更省心:

方法一:直接设置自定义Permalink结构(推荐)

不需要单独修改Category Base,直接一步到位:

  1. 进入WordPress后台的「设置」→「固定链接」
  2. 选择「自定义结构」,输入:/blog/%category%/%postname%/
  3. 点击「保存更改」

这样WordPress会自动生成正确的重写规则,既满足了/blog/分类名/文章名/的URL结构,又不会和Category Base产生冲突,完全避开了404问题。

方法二:手动调整重写规则(仅当必须修改Category Base时用)

如果你因为某些原因一定要把Category Base设为"blog",可以手动添加重写规则来解决冲突:

  1. 先在「固定链接」设置里,把自定义结构设为/%category%/%postname%/,同时把Category Base改成"blog",保存设置。
  2. 打开当前主题的functions.php文件,添加以下代码:
function resolve_blog_permalink_conflict() {
    add_rewrite_rule(
        '^blog/([^/]+)/([^/]+)/?$',
        'index.php?category_name=$matches[1]&name=$matches[2]',
        'top'
    );
}
add_action('init', 'resolve_blog_permalink_conflict');
  1. 回到「固定链接」页面,再次点击「保存更改」,刷新重写规则。

注意:这种方法容易和其他SEO插件的重写规则冲突,后期维护成本高,所以非必要不推荐。

额外检查点

  • 如果是Apache服务器,确保.htaccess文件有正确的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>
  • 如果是Nginx服务器,需要在站点的server配置块里添加:
location / {
    try_files $uri $uri/ /index.php?$args;
}
  • 暂时禁用所有SEO类插件,测试是否是插件导致的规则冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:23:37