Laravel 8部署在服务器admin子文件夹时CSS和JS资源加载路径错误问题
问题定位
现有配置中admin根目录的.htaccess静态资源匹配规则逻辑错误,public目录的RewriteBase配置与实际访问路径不匹配,导致静态资源请求被错误重定向到根域名路径。
修复步骤
前置确认
确保Apache已开启mod_rewrite模块,且站点配置中AllowOverride参数设置为All,保证.htaccess规则可以生效。
1. 替换admin子文件夹下的.htaccess配置
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews Options +FollowSymLinks </IfModule> RewriteEngine On RewriteBase /admin/ # 直接放行已存在的文件/目录,终止重写 RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # 静态资源请求转发到public目录 RewriteRule ^(.*\.(css|js|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot))$ public/$1 [L] # 其他非资源请求转发到入口文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ server.php [L] </IfModule>
2. 修正public文件夹下的.htaccess配置
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On RewriteBase /admin/public/ # 处理授权头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 非目录请求移除末尾斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 所有请求转发到前端控制器 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
3. 修正Laravel核心配置
修改config/app.php配置项:
'url' => env('APP_URL', 'https://example.com/admin'),'asset_url' => env('ASSET_URL', 'https://example.com/admin'),
同步修改项目根目录.env文件中的APP_URL参数为https://example.com/admin
4. 清理项目缓存
依次执行以下Laravel命令清理缓存:
php artisan config:clear php artisan route:clear php artisan view:clear
修改完成后重启Apache服务即可生效。
内容的提问来源于stack exchange,提问作者Jagdish Sharma
相关产品推荐
相关产品推荐

