WordPress 固定链接 404:Nginx 与 Apache 规则写法

· wordpress · 阅读 4
摘要

先说结论:WordPress 固定链接 404 基本不是 WordPress 的问题,而是服务器没把「不存在的路径」交给 index.php 处理。你要做的只有一件事:让服务器把请求转发给 WordPress 入口。下面分别给 Nginx

先说结论:WordPress 固定链接 404 基本不是 WordPress 的问题,而是服务器没把「不存在的路径」交给 index.php 处理。你要做的只有一件事:让服务器把请求转发给 WordPress 入口。下面分别给 Nginx 和 Apache 的规则,附判断方法和常见坑。

一、先确认是不是这个原因(1 分钟)

  • 首页能开,但文章页、分类页 404 → 典型伪静态未生效。
  • 把固定链接改成「朴素」(带 ?p=123)后能打开 → 确认是重写规则问题。
  • 后台「设置 → 固定链接」显示的是你想要的格式,但前台 404 → 同上。

如果改成「朴素」也打不开,那就不是伪静态问题,去看数据库或文件权限。

二、Nginx 规则(最常用)

在站点的 server { } 块里加:

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

如果站点是子目录(比如 /blog/),规则要相应调整:

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

关键理解:try_files 依次尝试「原路径文件 → 原路径目录 → 交给 index.php」。缺了这一行,Nginx 找不到文件就直接 404,根本不会去问 WordPress。

PHP 处理段也别漏

有的配置里 PHP 被单独处理,要确认存在:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-cgi.sock;   # 或 127.0.0.1:9000
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

不同面板的 socket 路径不一样,照面板给的写,别照抄。

三、Apache 规则

WordPress 自带 .htaccess,正常情况下内容是这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

文件存在但不生效,检查两处:

  • mod_rewrite 模块是否加载(a2enmod rewrite)。
  • 虚拟主机配置里目录的 AllowOverride 是否为 All,如果是 None,.htaccess 会被完全忽略。

这一条是 Apache 用户最常踩的坑:文件明明在,规则就是不起作用。

四、其他常见成因(别只盯着规则)

现象原因处理
只有部分文章 404文章别名冲突或含特殊字符改别名,用英文/拼音
中文标题全部 404URL 编码或服务器未支持固定链接改成 /%post_id%.html
分类页 404 但文章页正常分类基础名与页面别名冲突改分类基础名,避免和页面重名
刚迁移完全部 404数据库里 siteurl 还是旧域名改 wp-config 或数据库 option 表
开了 CDN 后 404CDN 回源路径不对检查回源 HOST 与路径规则

五、改完规则要做的事

  1. Nginx:nginx -t 测试语法,再 systemctl reload nginx。
  2. Apache:systemctl reload httpd 或 apachectl restart。
  3. 后台「设置 → 固定链接」直接点保存,触发规则重写。
  4. 清一次浏览器缓存或用无痕窗口测,避免看到旧的 404 缓存。

另外,如果站点用了缓存插件或 CDN,改规则后记得清一次缓存,否则你测到的还是旧结果,会误判「改了没用」。

六、推荐的固定链接格式

  • 中文站推荐:/%post_id%.html 或 /%category%/%post_id%.html(稳定,不怕标题变)。
  • 英文站推荐:/%postname%/(可读性好,利于分享)。
  • 不建议中途改格式:老链接会全部失效,除非做好 301。

固定链接一旦定下来就别频繁折腾,这是站点 URL 结构的基础,改一次代价很大。