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

如何在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;
    }
}

关键修改说明

  1. 修正favicon拼写错误:原配置中fabicon.ico为拼写错误,改为favicon.ico避免不必要的404日志。
  2. 调整try_files参数:将/wordpress/index.php?q=$uri&$args改为/wordpress/index.php?$args,符合WordPress原生的URL重写规则,避免参数冗余。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:49