DEVDIY |独立站外贸跨境电商开发头像
WordPress 首页正常、内页全 404:固定链接与伪静态规则排查步骤(Apache / Nginx)封面图

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」到这里就好了。没好,按服务器类型继续。

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

curl -sI https://你的域名/ | grep -i server

2A. Apache:检查 .htaccess 与 AllowOverride

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

# 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 生效:
<Directory /var/www/html>
    AllowOverride All
</Directory>

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

2B. Nginx:location 里要有 try_files

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

location / {
    try_files $uri $uri/ /index.php?$args;
}

子目录安装:

location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

常见翻车点:

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

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

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

4. 排查顺序小结

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

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

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

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

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/lgm252008/article/details/168538914

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--