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

Laravel 5.6将.htaccess移至根目录后CSS、JS文件无法加载求助

解决Laravel 5.6根目录部署后静态资源无法加载的问题

我看了你的.htaccess配置,问题大概率出在静态资源重写规则的位置和执行逻辑上,咱们一步步来排查修复:

1. 调整.htaccess的规则顺序

你当前的配置里,处理前端控制器的规则(RewriteRule ^ index.php [L])放在了静态资源规则的前面,这会导致所有请求先被导向index.php,静态资源的重写规则根本没机会生效。你需要把静态资源的规则移到前端控制器规则的前面。

修改后的.htaccess配置如下:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 先处理静态资源重写(移至前端控制器规则之前)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

2. 检查视图中的资源引用路径

确保你在Blade模板或HTML里引用静态资源时,没有硬编码/public/前缀:

  • 错误写法:<link rel="stylesheet" href="/public/css/app.css">
  • 正确写法:<link rel="stylesheet" href="/css/app.css">

更稳妥的方式是使用Laravel的辅助函数,它会自动适配你的部署路径:

<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<script src="{{ asset('js/app.js') }}"></script>

3. 验证Apache服务器配置

确认你的Apache已经启用mod_rewrite模块,并且虚拟主机配置允许.htaccess生效:

<Directory /path/to/your/project-root>
    AllowOverride All
</Directory>

如果没开启AllowOverride All,.htaccess里的所有规则都不会被执行。

4. 强制清除浏览器缓存

有时候浏览器会缓存旧的资源路径,导致修改后仍然加载失败。可以用Ctrl+Shift+R强制刷新页面,或者直接清除浏览器缓存后再测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:48:15