同一Nginx服务器下WordPress与Django共存时固定链接404问题
解决WordPress固定链接404问题(同服务器部署Django+WordPress+Nginx)
问题根源
从Nginx错误日志看,访问/blog/test这类带slug的路径时,Nginx错误地尝试在/usr/share/nginx/html目录下查找文件,没有将请求转发给WordPress的入口文件index.php。而WordPress的非默认固定链接(如文章名格式)需要所有动态请求都由index.php处理解析,这是核心问题所在。
修正Nginx配置
针对/blog路由块做如下调整,确保所有动态请求正确转发到WordPress:
server { listen 443 ssl; server_name www.example.com; # Django应用主路由(保留你的原有配置,比如uwsgi/proxy转发) location / { include uwsgi_params; uwsgi_pass unix:/path/to/your/django.sock; # 若使用Gunicorn则替换为:proxy_pass http://127.0.0.1:8000; } # WordPress /blog 路由配置 location /blog { # 指向WordPress安装目录的上级目录(假设WordPress在/var/www/wordpress) root /var/www; index index.php index.html index.htm; # 优先找静态文件,找不到则转发到index.php处理 try_files $uri $uri/ /blog/index.php$is_args$args; # PHP-FPM 处理配置 location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 拆分路径,让WordPress正确解析slug fastcgi_split_path_info ^(/blog)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } } # SSL 配置(保留你的证书路径) ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; }
关键配置说明
root /var/www;:因为WordPress安装在/var/www/wordpress,location /blog对应的root设为/var/www,才能让$document_root$fastcgi_script_name指向正确的/var/www/blog/index.php。try_files规则:确保静态资源直接返回,动态请求全部交给WordPress的index.php处理,同时保留URL参数。fastcgi_split_path_info:拆分/blog前缀和后续的slug路径,让WordPress能正确识别并解析固定链接。
后续操作
验证并重启Nginx
执行配置检查命令:nginx -t确认无错误后重启服务:
systemctl restart nginx刷新WordPress固定链接设置
登录WordPress后台,进入「设置」→「固定链接」,选择你需要的格式(如「文章名」),点击「保存更改」。这一步会让WordPress刷新内部路由规则,无需手动修改.htaccess(Nginx不依赖该文件)。
注意事项
- 确保WordPress安装目录的权限正确,Nginx运行用户(如
www-data)拥有读取权限。 - 检查PHP-FPM的socket路径是否与配置一致,确保PHP服务正常运行。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

