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

Laravel根项目中子项目静态资源加载失败的.htaccess配置求助

Laravel子项目静态资源无public路径无法加载的.htaccess修复方案

问题描述

我有两个Laravel项目,其中一个子项目放在根项目目录下。之前没法访问这个子项目,更新子项目里的.htaccess配置(如下)后能正常访问,但静态资源加载失败——只有带public路径的URL才能访问资源,比如https://sub_laravel_project_domain.com/public/images/logo.png,去掉public就打不开。试过Stack Overflow上的方案没用,求帮忙调整.htaccess配置。

原.htaccess配置:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.myrootdomain.com/$1 [R,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectory
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [L]
</IfModule>
RewriteCond %{HTTP_HOST} ^myrootdomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.myrootdomain\.com$
RewriteRule ^/?$ "https\:\/\/www\.myrootdomain\.com\/" [R=301,L]

修复后的配置

替换子项目的.htaccess为以下内容:

RewriteEngine On

# 强制跳转HTTPS(如果子项目用独立域名,把这里的域名改成子项目的)
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.myrootdomain.com/$1 [R,L]

# 核心:映射静态资源到public目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/subdirectory/public/%{REQUEST_URI} -f
RewriteRule ^(.*)$ /subdirectory/public/$1 [L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectory
RewriteRule ^index\.html$ - [L]

# 转发路由请求到子项目的index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /subdirectory/index.php [L]
</IfModule>

# 根域名跳转规则(如果子项目用独立域名,可删除这一段)
RewriteCond %{HTTP_HOST} ^myrootdomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.myrootdomain\.com$
RewriteRule ^/?$ "https://www.myrootdomain.com/" [R=301,L]

关键修改说明

  1. 静态资源映射:新增的规则会检查请求的资源是否在public目录下存在,如果存在就自动转发过去,这样/images/logo.png会被指向/subdirectory/public/images/logo.png,不用手动加public路径。
  2. 入口文件路径修正:把原规则里的/index.php改成/subdirectory/index.php,确保Apache能找到子项目的Laravel入口文件,避免路由出错。
  3. 域名适配:如果子项目有独立域名(比如你提到的sub_laravel_project_domain.com),记得把强制HTTPS和根域名跳转的规则里的域名改成子项目的,否则会跳转到根项目域名。

另外,确保子项目的public目录权限正确,Apache服务有读取该目录的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:17