如何在Nginx中配置WordPress作为Django项目的子目录?
问题:Nginx配置中WordPress子目录访问404错误
需求:
sample.com/指向Django项目sample.com/wordpress指向WordPress项目
当前访问sample.com/wordpress出现404 Not Found,现有Nginx配置如下:
server { listen 443 ssl default_server; server_name sample.com; ssl on; ssl_certificate /etc/letsencrypt/live/sample.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem; location =/fabicon.ico {access_log off; log_not_found off;} location /static{ alias /usr/share/nginx/html/static; } location /media{ alias /usr/share/nginx/html/media; } location /{ include proxy_params; proxy_pass http://unix:/home/user/project/project/project.sock; } location /wordpress { alias /var/www/wordpress; index index.php; try_files $uri $uri/ /wordpress/index.php?q=$uri&$args; } location ~ ^/wordpress/.+\.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } }
解决方案
原配置核心问题是用alias映射WordPress目录时,PHP请求的文件路径未正确解析,同时try_files参数设置不符合WordPress的URL重写逻辑。修改后的完整配置如下:
server { listen 443 ssl default_server; server_name sample.com; ssl on; ssl_certificate /etc/letsencrypt/live/sample.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem; location =/favicon.ico {access_log off; log_not_found off;} # 修正拼写错误:fabicon → favicon location /static{ alias /usr/share/nginx/html/static; } location /media{ alias /usr/share/nginx/html/media; } location /{ include proxy_params; proxy_pass http://unix:/home/user/project/project/project.sock; } location /wordpress { alias /var/www/wordpress; index index.php index.html index.htm; # 补充默认索引类型 # 调整try_files参数,确保无匹配文件时转发到WordPress入口 try_files $uri $uri/ /wordpress/index.php?$args; } location ~ ^/wordpress/.+\.php$ { alias /var/www/wordpress; # 新增alias映射,保证文件路径正确 include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 强制设置正确的脚本路径,覆盖默认的$document_root拼接逻辑 fastcgi_param SCRIPT_FILENAME $request_filename; } }
关键修改说明
- 修正favicon拼写错误:原配置中
fabicon.ico为拼写错误,改为favicon.ico避免不必要的404日志。 - 调整
try_files参数:将/wordpress/index.php?q=$uri&$args改为/wordpress/index.php?$args,符合WordPress原生的URL重写规则,避免参数冗余。 - PHP请求路径修正:在PHP的location块中添加
alias /var/www/wordpress,并设置fastcgi_param SCRIPT_FILENAME $request_filename——因为alias会将/wordpress/xxx.php映射为/var/www/wordpress/xxx.php,而默认的$document_root$fastcgi_script_name会拼接出错误路径,这一步是解决404的核心。
修改完成后,重启Nginx服务生效:
sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者Tio
相关产品推荐
相关产品推荐

