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

NGINX分目录部署Laravel与WordPress时wp-admin无法访问

wp-admin路径无法访问的核心原因
  • 斜杠自动补全缺失:访问example.com/blog/wp-admin时默认不带末尾斜杠,Nginx不会自动识别这是目录请求,既不会触发目录索引查找,也不会自动301补斜杠,直接返回文件不存在的错误。
  • 回退路径匹配错误:/blog/块内的try_files最后一个回退路径/blog/index.php是相对于server级root(Laravel的public目录)解析的,不会读取alias指向的WordPress目录下的index.php,路径不存在时会直接fallback到Laravel的路由规则,返回Laravel的404页面。
  • 规则冲突:同一块内同时写了if (!-e $request_filename)的rewrite逻辑和try_files逻辑,两者优先级冲突,会导致部分WP后台路径重写异常。
  • PHP解析参数错误:嵌套的PHP location块内fastcgi_split_path_info规则和alias路径不匹配,访问WP后台PHP脚本时会传递错误的脚本路径给PHP-FPM,导致脚本找不到。
修正方案

前置WordPress配置

先修改WordPress部署目录下的wp-config.php,添加以下两行配置,固定WP的子目录访问地址,避免后台循环跳转:

define('WP_HOME', 'https://example.com/blog');
define('WP_SITEURL', 'https://example.com/blog');

如果之前是子域名部署,还需要修改数据库wp_options表中siteurl和home两个字段的值为上述地址,替换旧的子域名链接。

修正后的NGINX配置

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

server {
    listen 443 ssl;
    server_name example.com;
    charset utf-8;

    ssl_certificate     /etc/ssl/example.crt;
    ssl_certificate_key /etc/ssl/example.key;

    root /var/www/vhosts/example.com/httpdocs/laravel/public;
    index index.html index.htm index.php;

    # Laravel主站规则
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 403 /index.php;
    error_page 404 /index.php;

    # 主站PHP解析规则
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 180;
        include fastcgi_params;
    }

    ## WordPress /blog 子路径配置
    # 自动给wp-admin目录补末尾斜杠,解决目录访问异常
    rewrite ^/blog/wp-admin$ $scheme://$host$uri/ permanent;

    location ^~ /blog {
        alias /var/www/vhosts/example.com/httpdocs/wordpress;
        
        # 静态资源直接返回,不转发PHP解析
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
            expires max;
            log_not_found off;
            access_log off;
        }

        # WordPress路径重写
        if (!-e $request_filename) {
            rewrite ^/blog/(.*)$ /blog/index.php?q=$1 last;
        }

        # WordPress PHP解析规则
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_read_timeout 180;
            include fastcgi_params;
        }
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

配置调整说明

  • 替换80端口的rewrite规则为return 301,跳转效率更高
  • 新增wp-admin路径斜杠补全规则,避免不带斜杠访问时的解析错误
  • 删除/blog块内冲突的try_files规则,避免回退路径错误指向Laravel目录
  • 移除PHP块内不匹配alias规则的fastcgi_split_path_info配置,直接用$request_filename传递正确的WordPress脚本路径给PHP-FPM
  • 新增WordPress静态资源匹配规则,避免图片、样式、脚本等静态资源被Laravel规则拦截或错误转发给PHP解析
  • 调整/blog路径匹配规则,兼容带/不带末尾斜杠的访问场景

上线操作步骤

  • 执行nginx -t检查配置语法是否正确
  • 语法验证通过后执行nginx -s reload重载配置
  • 若WordPress安装了缓存、安全类插件,需在插件设置中更新站点地址为新的子路径地址,避免插件自带的跳转规则导致后台访问异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:21:21