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

子域名部署的Laravel API仅首页可用,如何配置.htaccess?

问题分析与解决方案

你的.htaccess存在三个核心问题,导致除首页外的路由无法正常解析:

1. 规则执行顺序错误

你先定义了前端控制器规则(将非文件/目录请求转到index.php),但后续的public目录重写规则根本不会触发——[L]标志会终止当前请求的规则处理流程。正确逻辑应该是先把请求重写到public目录,再处理前端控制器的路由转发。

2. 子域名匹配规则无效

当前规则用%{HTTP_HOST} ^subdomain硬编码了子域名,而你的实际子域名是myapp.mydomain.com,这个匹配条件永远不会生效,导致public目录的重写逻辑对当前子域名完全不起作用。

3. 子域名路由重写丢失路径参数

针对子域名的规则中,RewriteRule ^(.*)$ public/ [L]没有保留请求的路径参数(即$1),所有非首页请求都会被直接转到public/,而非public/aaa或public/api/os,自然触发404错误。


修正后的.htaccess配置

RewriteEngine On

# 处理子域名myapp.mydomain.com的请求重写
RewriteCond %{HTTP_HOST} ^myapp\.mydomain\.com$
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]

# 保留主域名的重写规则(如果需要)
RewriteCond %{HTTP_HOST} ^mydomain\.com$
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]

# 移除非目录请求的尾部斜杠
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]

# Laravel前端控制器:转发所有非文件/目录请求到index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

额外检查点

  • 确认Nginx子域名配置的根目录指向/mydomain_com/myapp,而非/mydomain_com/myapp/public;
  • 确保Laravel的storage和bootstrap/cache目录拥有正确的读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:10:26