WordPress无法加载page.php,普通页面访问返回404.php问题排查
这种情况我碰到过好几次,结合你描述的细节(CPT正常、固定链接已刷新、.htaccess验证正确),大概率是下面几个点出了问题,挨个排查应该能解决:
自定义文章类型(CPT)的重写规则冲突
注册CPT时的rewrite参数很容易踩坑,如果slug和普通页面的路径重合,或者没设置with_front参数,会直接干扰页面的路由解析。比如你要是把CPT的slug设成page,那肯定和默认页面系统冲突。
检查你注册CPT的代码,确保rewrite配置合理:register_post_type('your_cpt_slug', array( // 其他必要参数(public、has_archive等) 'rewrite' => array( 'slug' => 'your-unique-cpt-slug', // 别和page、post这些默认路径重名 'with_front' => true, // 让CPT继承固定链接的前缀,避免冲突 'pages' => true ), ));修改后记得再去「设置→固定链接」页面重新保存一次,刷新重写规则。
Page模板文件的问题
WordPress的模板层级有优先级,如果你的主题里存在page-{slug}.php或page-{id}.php但文件损坏/不存在,或者page.php本身有语法错误(比如PHP未闭合的标签、调用了不存在的函数),在WP_DEBUG关闭的情况下,可能直接返回404而不是报错。
排查步骤:- 确认
page.php确实在主题根目录,文件名没拼写错误(全小写、没有多余符号) - 临时把默认主题(比如Twenty Twenty-Four)的
page.php替换到你的主题里,测试页面能否加载。如果能,说明你的page.php有代码问题,逐行排查循环、模板标签部分。
- 确认
主题/插件的重写规则干扰
有些插件(比如自定义路由、SEO类插件)或者主题的functions.php里,可能用add_rewrite_rule添加了自定义规则,但没正确处理优先级,把普通页面的请求给拦截了。
排查步骤:- 先禁用所有插件,测试页面是否正常加载。如果恢复正常,再逐个启用插件,找到搞事情的那个。
- 切换到默认主题测试,如果页面正常,说明是你当前主题的代码问题,去
functions.php里找和重写规则相关的代码排查。
数据库中页面的状态或Slug冲突
有时候后台看起来页面是已发布的,但数据库里的post_status可能不是publish,或者页面的slug和某个CPT条目的slug完全重复,导致路由匹配错误。
排查步骤:- 在后台编辑页面,检查「permalink」部分的slug是否和某个CPT条目重复
- 确认页面状态是「已发布」,点击「预览」看能否正常加载——如果预览正常但前端404,还是回到重写规则的问题上。
服务器环境的隐藏问题
你说.htaccess没问题,但如果服务器用的是Nginx而不是Apache,那.htaccess根本不起作用,得配置Nginx的rewrite规则。另外,.htaccess的权限不对(比如设成了777或者服务器用户没有读写权限)也会导致重写规则失效。
解决办法:- 如果是Nginx,在站点配置文件里添加:
然后重启Nginx服务。location / { try_files $uri $uri/ /index.php?$args; } - 检查.htaccess的权限,一般设为644,所属用户为服务器运行用户(比如www-data)。
- 如果是Nginx,在站点配置文件里添加:
内容的提问来源于stack exchange,提问作者Mike

