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处理伪静态路由。
后续必要操作
- 更新WordPress配置:登录WordPress后台,在「设置→常规」中把「WordPress地址(URL)」和「站点地址(URL)」设置为
https://example.app/resources。 - 刷新固定链接:进入「设置→固定链接」,选择「文章名」模式并点击「保存更改」,强制WordPress更新rewrite规则。
- 重启Nginx:执行
sudo systemctl restart nginx使配置生效。 - 检查权限:确保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
相关产品推荐
相关产品推荐

