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

Laravel迁移Nginx后复现.htaccess规则解决API访问异常问题

配置问题核心

你当前写的Nginx配置缺了三个关键逻辑,所以Laravel子域名无法正常运行:

  • 没有配置PHP-FPM解析规则,所有.php请求不会被交给PHP进程处理
  • 没有复刻Laravel必需的URL重写规则(不存在的路径统一走index.php入口、尾斜杠301跳转、Authorization请求头透传)
  • 没有区分Laravel应用和静态前端的路由转发逻辑,请求找不到对应入口文件
完整可用配置

直接替换你现有配置即可,注意根据实际环境调整PHP-FPM监听地址:

# 按子域名映射站点根目录,原有逻辑保留
map $http_host $webroot {
    src.mysite.com  /home/site/wwwroot/public;
    api.mysite.com  /home/site/wwwroot/public;
    default         /home/site/wwwroot/dist;
}

server {
    listen 8080;
    listen [::]:8080;
    server_name *.mysite.com;

    root $webroot;
    index index.php index.html;

    # 对应Apache规则:Options -Indexes 关闭目录列表
    autoindex off;
    # 对应Apache规则:Options -MultiViews 关闭文件名模糊匹配
    disable_symlinks off;

    # 全局透传Authorization头,对应Apache的HTTP_AUTHORIZATION重写规则
    fastcgi_param HTTP_AUTHORIZATION $http_authorization if_not_empty;

    # 对应Apache规则:非目录路径带尾斜杠的做301跳转去掉末尾斜杠
    rewrite ^/(.+)/$ /$1 permanent;

    location / {
        # 优先匹配实际存在的文件/目录,匹配不到走自定义路由规则
        try_files $uri $uri/ @route_handler;
    }

    # 路由分发逻辑
    location @route_handler {
        # 命中Laravel应用的子域名,所有请求转发到public/index.php入口
        if ($webroot = "/home/site/wwwroot/public") {
            rewrite ^(.*)$ /index.php last;
        }
        # 静态前端站点,所有请求转发到dist/index.html(适配前端History路由模式)
        rewrite ^(.*)$ /index.html break;
    }

    # PHP请求解析规则
    location ~ \.php$ {
        # 禁止直接访问不存在的PHP文件,防恶意请求
        try_files $uri =404;
        # !!!注意替换为你服务器实际的PHP-FPM监听地址
        # 常见格式:127.0.0.1:9000 或者 unix:/run/php/php8.2-fpm.sock
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # 再次透传Authorization头,避免Laravel拿不到认证信息
        fastcgi_param HTTP_AUTHORIZATION $http_authorization if_not_empty;
    }

    # 静态资源处理(可选,优化访问性能)
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2?|ttf|svg|webp)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
        try_files $uri =404;
    }
}
上线验证步骤
  1. 先把配置里fastcgi_pass的值改成你服务器实际的PHP-FPM监听地址,可通过查看PHP-FPM的pool配置文件确认路径
  2. 执行nginx -t检查配置语法,确认无报错后执行nginx -s reload重载配置生效
  3. 逐项验证功能:
    • 访问静态资源(js/css/图片)是否正常返回200
    • 调用api.mysite.com下的接口,是否正常返回Laravel响应而非404
    • 带Authorization头的接口请求,Laravel侧是否能正常获取到认证信息
    • 前端站点刷新子路由是否正常,不返回404

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:57:33