You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX中Next.js与WordPress子目录/resources的文章名固定链接失效问题

解决方案:Nginx配置实现Next.js与WordPress伪静态共存

问题根源

WordPress使用「文章名」固定链接时,需要Nginx将/resources/下的非静态文件请求转发到WordPress的index.php处理,但初始配置未正确设置rewrite规则,导致请求被Next.js捕获返回500;调整后又因路径映射错误,出现文件未找到的404。

正确的Nginx配置方案

以下是经过验证的完整Nginx server配置,确保根路径Next.js正常运行,同时/resources/下的WordPress伪静态链接工作:

server {
    listen 80;
    server_name example.app;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.app;

    # SSL配置(根据你的证书路径调整)
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    # 根路径转发到Next.js(监听3000端口)
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 处理WordPress的/resources/路径
    location ^~ /resources/ {
        # 用alias映射访问路径到WordPress实际目录
        alias /var/www/html/wordpress/;
        index index.php index.html index.htm;

        # 伪静态核心规则:先找真实文件,找不到就转发到index.php处理
        try_files $uri $uri/ /resources/index.php?$args;

        # PHP处理配置(根据你的PHP-FPM监听方式调整)
        location ~ \.php$ {
            fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 替换为你的PHP版本
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }
    }

    # 禁止直接访问WordPress敏感文件
    location ~* /(wp-config\.php|readme\.html|license\.txt) {
        deny all;
        return 404;
    }
}

关键配置说明

  • location ^~ /resources/:使用^~优先级匹配,确保所有/resources/开头的请求优先进入该规则,不会被根路径的Next.js代理捕获。
  • alias /var/www/html/wordpress/:正确映射访问路径/resources/到WordPress实际安装目录/var/www/html/wordpress/,避免路径错位导致的文件未找到错误。
  • try_files规则:先尝试访问请求的真实文件/目录,若不存在则将请求转发到/resources/index.php,由WordPress处理伪静态路由。

后续必要操作

  1. 更新WordPress配置:登录WordPress后台,在「设置→常规」中把「WordPress地址(URL)」和「站点地址(URL)」设置为https://example.app/resources。
  2. 刷新固定链接:进入「设置→固定链接」,选择「文章名」模式并点击「保存更改」,强制WordPress更新rewrite规则。
  3. 重启Nginx:执行sudo systemctl restart nginx使配置生效。
  4. 检查权限:确保Nginx用户(通常是www-data)有WordPress目录的读取权限:
    sudo chown -R www-data:www-data /var/www/html/wordpress
    sudo chmod -R 755 /var/www/html/wordpress
    

常见问题排查

  • 若仍出现500错误:检查PHP-FPM是否正常运行,查看Nginx错误日志(/var/log/nginx/error.log)和WordPress错误日志(需在wp-config.php开启WP_DEBUG=true后查看wp-content/debug.log)。
  • 若静态资源(图片、CSS)无法加载:确认WordPress后台「设置→媒体」的文件上传路径正确,或检查Nginx是否允许访问静态文件。

内容的提问来源于stack exchange,提问作者Mizan Rifat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:01:13