欢迎光临
我们一直在努力

WordPress 改固定链接后整站文章 404:先刷重写规则,再核 .htaccess / Nginx try_files

后台把固定链接从「朴素」改成「文章名」,或刚迁完机,首页还能打开,点进任意文章却是 404。这通常不是文章被删了,也不是今天那种 Heartbeat 刷 CPU、内存耗尽或 WP-Cron 不跑——核心是:URL 重写规则没落到 Web 服务器上,请求停在静态路径,没进 index.php。

更稳的顺序是:先在「设置 → 固定链接」点一次保存刷规则 → 再核 Apache .htaccess / AllowOverride → Nginx 则看 try_files → 排除页面缓存与 CDN 在吐软 404 → 最后按清单验收。别一上来改主题或重装插件。

现象:postname 全站文章 404,首页可能正常

典型信号:

  • 首页、部分静态页 OK;/你好世界/、/2026/10/sample-post/ 一类美化 URL 全部 404
  • 临时改回「朴素」?p=123 能打开同一篇文章 → 几乎可断定是重写层,不是内容丢失
  • 迁机、换目录、从 Apache 换 Nginx、关过 mod_rewrite、或用过「一键伪静态」面板之后高发

浏览器直接打开文章 URL,看状态码是真 404 还是 200 但页面写着「未找到」。后者更像主题/缓存模板,处理顺序不同。也可对照访问日志:请求路径是否从未到达 PHP-FPM / mod_php。

第一步:设置 → 固定链接,保存一次(flush rewrite)

进入后台 设置 → 固定链接,结构不用改也行,直接点 保存更改。WordPress 会调用 flush_rewrite_rules(),把当前结构写回规则表,并尝试更新根目录 .htaccess(Apache 且可写时)。

注意:

  • 只改数据库选项、不点保存,规则常仍是旧的
  • 保存后若提示无法写入 .htaccess,规则在 WP 侧刷新了,服务器侧文件可能仍缺块——下一步必须手核
  • 生产变更前先备份根目录 .htaccess / Nginx 站点配置;保存本身风险低,但别同时大改缓存插件
  • 多站点或自定义 CPT 较多时,保存后抽查归档与自定义文章类型的单页,不要只测默认 post

仍 404 就不要反复点保存十几次,进入 Web 服务器配置核对。 固定链接保存后核对重写

Apache:.htaccess 与 AllowOverride

文档根(与 wp-config.php 同级)应有 WordPress 标准重写块(可被 WP 自动维护,勿删标记行):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

同时确认:

  • mod_rewrite 已启用(Debian/Ubuntu 常见:a2enmod rewrite 后重载)
  • 该目录 AllowOverride 至少允许 FileInfo(或 All);若是 None,.htaccess 整份被忽略,后台怎么保存都没用
  • 站点若在子目录,RewriteBase 要带路径(如 /blog/)
  • 虚拟主机里 DocumentRoot 必须指向当前 WP 根;迁机后指到旧目录是「首页碰巧还有静态缓存、文章全 404」的常见组合

改完重载 Apache。无写权限时,用面板/SSH 手工贴回上块,权限收回到 Web 用户可读即可。需要把「迁机后 URL、主机重写、目录权限」放在同一套环境核对里时,可对照 WordPress 迁机与主机环境核对,先确认文档根与服务器类型再改规则。

Nginx:没有 .htaccess,靠 try_files

Nginx 不读 .htaccess。固定链接保存只刷新 WP 内部规则;location 仍要落到 PHP。常见站点根配置片段:

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

location ~ \\.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php-fpm.sock; # 按实际 pool 改
}

核对:

  • root / alias 是否指向真正的 WP 文档根(迁机后最易指错)
  • 是否被更靠前的 location 抢走,静态 404 页直接返回而没进 index.php
  • 有的面板生成「静态站点」模板,缺 try_files 回退;从 Apache 迁过来时尤其容易漏
  • 改完 nginx -t 再 reload;保留旧 conf 以便回滚。错误配置不要在高峰直接覆盖唯一一份 live 文件

排除页面缓存 / CDN 的「伪 404」

规则已通、本机 curl -I 已 200,公网仍 404 时:

  • 清全页缓存插件、对象缓存里与该 URL 相关的项;必要时短暂关闭全页缓存做 A/B
  • CDN / 边缘若曾缓存过 404,按 URL 或目录做 purge;必要时短时降 TTL 验证
  • 用无痕窗口或带 Cache-Control: no-cache 的请求头,看是否还有旧的 cf-cache-status / x-cache 命中

软 404(200 +「未找到」文案)优先查主题 404 模板与缓存,而不是再改 try_files。确认修复后,再按需重新开启缓存,避免把排查期的 404 又写回边缘。

验收清单

  • 固定链接页已保存一次;必要时已备份并核对 .htaccess / Nginx conf
  • Apache:mod_rewrite + AllowOverride 生效;WordPress 重写块完整;或 Nginx:try_files … /index.php?$args 指向正确文档根
  • 朴素 ?p=ID 与美化 permalink 同一篇文章均可 200;抽查分类/标签/分页与一两个自定义类型
  • 已排除全页缓存与 CDN 缓存旧 404;无痕/换节点复查状态码与响应头
  • 配置变更有旧文件备份与回滚步骤;nginx -t / Apache 语法检查通过后再 reload

改固定链接后的整站文章 404,优先「刷重写 → 核主机重写 → 再清边缘缓存」,比换主题、重装插件更短路径,也不容易把生产配置改散。

赞(0)
未经允许不得转载:171主机测评 » WordPress 改固定链接后整站文章 404:先刷重写规则,再核 .htaccess / Nginx try_files
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址