WordPress 首页正常、内页全 404:固定链接与伪静态规则排查步骤(Apache / Nginx)

署名:DEVDIY

标签:WordPress, 伪静态, 固定链接, Nginx, Apache, 404

原文/延伸阅读:https://devdiy.cn/wordpress/

典型现象:首页能打开,文章、分类、产品页一律 404;后台能进,数据库里内容也都在。

这种情况十有八九不是数据丢了,而是 WordPress 的固定链接格式和 Web 服务器的重写(rewrite)规则对不上 。首页走的是 index.php 默认入口,所以不受影响;内页的「漂亮链接」需要服务器把请求转给 index.php,规则一缺就 404。常见诱因:迁移服务器、换主机面板、改过 Nginx 配置、换主题后有人顺手动了伪静态。

下面按「先确认 → 再按服务器类型修 → 最后排插件」的顺序走。

0. 先用一条请求确认是不是重写问题

把任意一篇文章的 ID 找出来(后台文章列表悬停可见 post=123),访问:

复制代码
https://你的域名/?p=123
  • 能打开 → 内容在,问题基本锁定在重写规则;继续往下。
  • 也打不开 → 不是伪静态问题,先查数据库连接、站点地址(siteurl/home)或缓存。

1. 后台重新保存一次固定链接(1 分钟)

路径:设置 → 固定链接 → 不改任何选项,直接点「保存更改」。

这一步会刷新 WordPress 内部的 rewrite rules 缓存;在 Apache 下如果 .htaccess 可写,还会自动重写该文件。很多「迁移后 404」到这里就好了。没好,按服务器类型继续。

不确定是哪种服务器,可以看响应头:

bash 复制代码
curl -sI https://你的域名/ | grep -i server

2A. Apache:检查 .htaccess 与 AllowOverride

站点根目录(与 wp-config.php 同级)的 .htaccess 应包含标准块:

apache 复制代码
# 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

站点装在子目录(如 /blog/)时,RewriteBase 和最后一行要改成 /blog/ 和 /blog/index.php。

文件内容没问题仍 404,再查两处:

  1. mod_rewrite 是否启用:apache2ctl -M | grep rewrite,没有就 a2enmod rewrite 后重启。
  2. 虚拟主机配置里该目录是否允许 .htaccess 生效:
apache 复制代码
<Directory /var/www/html>
    AllowOverride All
</Directory>

AllowOverride None 时 .htaccess 会被完全忽略,这是迁移到新机器后最容易漏的一项。

2B. Nginx:location 里要有 try_files

Nginx 不读 .htaccess,后台「保存固定链接」对它不起作用,必须在 server 配置里写:

nginx 复制代码
location / {
    try_files $uri $uri/ /index.php?$args;
}

子目录安装:

nginx 复制代码
location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

常见翻车点:

  • 宝塔等面板的「伪静态」下拉选成了别的程序模板,或者换站后没重新选 WordPress;
  • 有人为了「加速」加了自定义 location,把 .html 或带参数的请求提前 return 404;
  • 改完没重载。先测后载:
bash 复制代码
nginx -t && systemctl reload nginx

3. 规则正确仍 404:查插件与站点地址

  • 重定向/SEO 类插件 :临时把 wp-content/plugins 中相关插件目录改名停用,再刷新内页。
  • 自定义文章类型:产品、案例等由插件或主题注册的类型,注册代码变动后需要再保存一次固定链接;也可用 WP-CLI:
bash 复制代码
wp rewrite flush --hard
wp rewrite list | head
  • 站点地址:设置 → 常规里的「WordPress 地址」和「站点地址」是否与当前域名、http/https 一致;不一致时会出现跳转后 404。
  • CDN 或反向代理:如果前面挂了 CDN,先绕过 CDN 直连源站测试,确认 404 是源站产生的还是边缘缓存的旧结果。

4. 排查顺序小结

步骤 判断依据 处理
?p=ID 访问 能开 = 重写问题 继续下一步
保存固定链接 恢复 = 规则缓存过期 结束
Apache .htaccess + mod_rewrite + AllowOverride 补齐后重启
Nginx try_files ... /index.php?$args nginx -t 后 reload
仍 404 插件/自定义类型/站点地址/CDN 逐项隔离

改服务器配置前,先把原文件复制一份(.htaccess.bak、xxx.conf.bak),出问题可以一秒回滚。不建议为这个问题重装 WordPress 或重新导入数据库------内容本身通常是好的。

------ DEVDIY,日常做 WordPress 外贸站、Shopify 外贸站和微信小程序的开发与排查,这篇是 WordPress 侧的常见问题记录。

延伸阅读:https://devdiy.cn/wordpress/

相关推荐
小天源13 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
betazhou17 小时前
Apache seatunel配置-数据同步测试(直接把采集数据打印到控制面板) - SQL server
sqlserver·apache·seatunnel
SelectDB技术团队17 小时前
Apache Doris 的时间旅行与快照能力:边界、替代路径与可落地操作
数据库·apache·数据湖·apache doris·数据库选型·多模湖仓
幸福清风20 小时前
从域名到一行 nginx 配置:一次站点 HTTPS 证书更换与排障复盘
python·nginx·https
梅梅绵绵冰21 小时前
Nginx反向代理
运维·nginx
betazhou1 天前
Apache Seatunnel 抽取SQL server实时同步到Oracle(四)
数据库·oracle·apache·sql server·seatunnel
2601_965619692 天前
AI视频制作:财经数据可视化视频怎么做:AI 自动生成图表动画的实操流程
人工智能·nginx·音视频
2601_965619692 天前
历史解说视频怎么做:青铜器瓷器文物画面自动对齐的完整教程
运维·nginx·音视频
.冰块.2 天前
ELK 日志分析系统实验:部署 Elasticsearch 双节点集群实现 Apache 日志采集与 Kibana 可视化
elk·elasticsearch·apache·日志