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; } }
上线验证步骤
- 先把配置里
fastcgi_pass的值改成你服务器实际的PHP-FPM监听地址,可通过查看PHP-FPM的pool配置文件确认路径 - 执行
nginx -t检查配置语法,确认无报错后执行nginx -s reload重载配置生效 - 逐项验证功能:
- 访问静态资源(js/css/图片)是否正常返回200
- 调用api.mysite.com下的接口,是否正常返回Laravel响应而非404
- 带Authorization头的接口请求,Laravel侧是否能正常获取到认证信息
- 前端站点刷新子路由是否正常,不返回404
内容的提问来源于stack exchange,提问作者jssDev
相关产品推荐
相关产品推荐

