Laravel 8部署生产服务器后样式JS等静态资源加载失败如何解决
问题原因
你当前将项目根目录作为Web服务文档根的部署方式下,Laravel自带的CSS、JS、图片等静态资源实际存放于public子目录,现有.htaccess规则未配置静态资源路径映射,请求静态资源时会直接在根目录查找文件,或被统一转发到入口文件,导致资源加载失败。
修复方案
直接替换根目录下的.htaccess文件内容为以下配置:
Options -MultiViews -Indexes RewriteEngine On # 处理Authorization请求头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 静态资源路径重写:根目录不存在对应资源时,自动映射到public目录查找 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L] # 非目录路径自动去除末尾斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 其余业务请求统一转发到前端入口 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
注意事项
- 配置更新后请清除浏览器缓存再测试,避免旧的301重定向缓存导致规则不生效。
- 该方案仅适用于无法修改Web服务文档根目录的场景,生产环境优先推荐将Web服务的文档根直接指向项目的
public目录,避免项目敏感文件(如.env)暴露在公网可访问路径下,同时减少重写规则带来的额外性能开销。 - 如果项目中使用
asset()、mix()等助手函数生成的资源路径仍异常,可以在项目根目录的.env文件中添加配置ASSET_URL=/public,即可生成正确的资源访问路径。
内容的提问来源于stack exchange,提问作者Piotr Popławski
相关产品推荐
相关产品推荐

