.htaccess配置重定向到public后同级app目录API无法访问求助
问题根因
你当前的重写规则会把所有路径中不包含public/前缀的请求全部转发到public/目录下匹配,所以当你请求/app/xxx路径的接口时,请求会被转发到public/app/xxx,找不到对应资源导致接口失效。
修复后的.htaccess配置
RewriteEngine On # 新增规则:匹配到app目录开头的请求直接终止重写,正常访问资源 RewriteRule ^app/ - [L,NC] RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC] RewriteRule ^ %1 [L,NE,R=302] RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
规则说明
- 新增的排除规则优先级最高,
^app/匹配所有以app目录开头的请求,-代表不做路径重写,L代表匹配到这条规则后就不再执行后续的重写逻辑,NC代表匹配时不区分大小写 - 原有站点默认指向public目录的逻辑完全保留,不会影响前端页面、静态资源的正常访问
- 如果你后续还有其他和public同级的目录需要开放访问,参照新增规则的格式添加对应目录的排除规则即可,比如需要开放
storage/目录就新增一行RewriteRule ^storage/ - [L,NC]
优化建议
等你确认所有规则都运行正常后,可以将R=302修改为R=301,将临时重定向改为永久重定向,降低搜索引擎抓取和用户访问的重定向开销。
内容的提问来源于stack exchange,提问作者Florian Thiercelin
相关产品推荐
相关产品推荐

