欢迎光临
我们一直在努力

Nginx 环境下的 WordPress 伪静态规则,为什么照抄别人的却报 404?

许多个人站长在使用 Nginx 部署 WordPress 时,启用伪静态(Permalinks)后,首页正常,但点击文章链接就会出现 404 错误。很多人会从网上复制代码粘贴,但问题依旧。这是因为 Nginx 的工作原理与 Apache 不同,它不会自动尝试重写请求,必须通过核心指令显式配置。

为什么照抄规则还会报 404?

Nginx 是一款高性能的 Web 服务器,它的特点是高效和配置严格。当用户访问一个像 /2023/my-post/ 这样的伪静态链接时:

  1. Nginx 尝试在网站根目录寻找 /2023/my-post/ 这个物理文件目录
  2. 由于这个文件不存在,如果配置缺失或错误,Nginx 会直接返回 404。

Apache 通过 .htaccess 文件中的 RewriteRule 可以自动处理重写,但 Nginx 需要使用 try_files 指令来告诉它:如果找不到请求的文件或目录,就将请求内部重定向到 index.php,让 WordPress 核心去处理路由。

如果你的配置中缺少或错误地使用了 try_files,则伪静态必定失败。

核心解决方案:使用 try_files

正确的 WordPress Nginx 伪静态规则必须包含以下核心结构,并放置在你的 server 配置块中。

以下是一个完整且标准的 Nginx 配置示例:

server {
    listen 80;
    server_name www.example.com example.com;

    # 网站根目录,请确保路径正确
    root /var/www/wordpress;
    index index.php index.html index.htm;

    # 核心伪静态处理块
    location / {
        # 关键指令:
        # 1. 尝试查找 $uri (文件)
        # 2. 尝试查找 $uri/ (目录)
        # 3. 如果前两者都找不到,则将请求转发给 /index.php 并带上原始参数 $args
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP-FPM 处理块
    # 确保 fastcgi_pass 指向正确的 PHP-FPM Socket 或 IP:Port
    location ~ \.php$ {
        # 如果是文件不存在,返回 404
        try_files $uri =404;
        include fastcgi_params;
        # **重要:根据你的系统环境修改下面的路径或端口**
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 阻止访问隐藏文件和目录
    location ~ /\. {
        deny all;
    }
}

重点解析 try_files $uri $uri/ /index.php?$args;

这行代码是解决 WordPress 404 问题的关键:

  • $uri: Nginx 首先检查请求的 URI 是否对应一个静态文件(例如 CSS、图片)。
  • $uri/: 如果不是文件,则检查它是否对应一个目录。
  • /index.php?$args: 如果前两者都找不到,Nginx 会执行一个内部跳转/index.php,并将用户请求的所有原始参数 ($args) 传递给它。这样,WordPress 就可以加载并根据参数解析出正确的文章内容。

实施与验证步骤

  1. 编辑配置: 找到你的 Nginx 站点配置文件(通常在 /etc/nginx/sites-available//etc/nginx/conf.d/ 下),将上述 location / 块替换或添加进去。
  2. 检查 Nginx 配置: 运行以下命令,确保配置文件语法正确。
    sudo nginx -t
    
  3. 重载 Nginx: 如果检查通过,重载服务使新配置生效。
    sudo systemctl reload nginx
    

常见额外排查点

如果应用了正确的 try_files 规则后仍然出现 404,请检查以下两点:

  1. PHP-FPM 配置路径: 确认你的 location ~ .php$ 块中的 fastcgi_pass 指令指向了正确的 PHP-FPM 服务地址(Socket 路径或 IP:Port)。如果 PHP-FPM 服务未运行或路径错误,Nginx 将无法处理 .php 文件,可能导致伪静态重写到 index.php 后,该文件本身也无法执行而返回 404。
  2. WordPress 后台设置: 登录 WordPress 后台,进入 设置 -> 固定链接 (Permalinks),确认你选择了一个非“朴素”的链接结构(例如:月份和名称)。即使规则正确,如果后台设置是朴素模式,伪静态也不会生效。
【本站文章皆为原创,未经允许不得转载】:汤不热吧 » Nginx 环境下的 WordPress 伪静态规则,为什么照抄别人的却报 404?
分享到: 更多 (0)

评论 抢沙发

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