Laravel部署至Hostinger后SCSS未加载及路由失效问题排查
Laravel部署至Hostinger后SCSS样式未加载、路由无法访问问题
我用Laravel开发了一个Web应用,部署到Hostinger生产服务器预览时,出现两个问题:
- SCSS编译后的样式无法加载
- 控制器路由无法正常访问
本地环境运行完全正常,已经执行npm run production用Laravel Mix构建了资源,怀疑问题出在.htaccess配置上,相关配置和项目信息如下:
.htaccess 配置
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /folder1/ RewriteRule ^(.*)$ public/index.php/$1 [L] </IfModule>
package.json 配置
{ "private": true, "type": "commonjs", "scripts": { "dev": "npm run development", "development": "mix", "watch": "mix watch", "hot": "mix hot", "prod": "npm run production", "production": "mix --production" }, "devDependencies": { "axios": "^1.1.2", "laravel-mix": "^6.0.49", "laravel-vite-plugin": "^0.7.5", "resolve-url-loader": "^5.0.0", "sass": "^1.63.6", "sass-loader": "^12.1.0", "vite": "^4.0.0" }, "dependencies": { "bootstrap": "^5.3.0", "jquery": "^3.7.0", "toastr": "^2.1.4", "webpack": "^5.88.1" } }
样式引用代码
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
问题排查与修复方案
1. 修复.htaccess配置问题
当前Rewrite规则会导致静态资源和路由解析异常,修改为适配Hostinger的配置:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /folder1/ # 跳过真实存在的文件和目录,直接访问静态资源 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 转发请求到Laravel入口,保留请求参数 RewriteRule ^(.*)$ public/index.php?/$1 [L,QSA] </IfModule>
- 新增的
RewriteCond确保css、js等静态资源不会被转发到index.php,直接返回文件内容 QSA标志保证路由参数能正确传递到Laravel控制器
2. 确认资源构建与路径配置
- 检查服务器
public/css目录下是否存在app.css和mix-manifest.json,确保npm run production编译后的文件完整上传 - 如果部署在子目录
/folder1/,需在webpack.mix.js中设置资源根路径,重新编译上传:
mix.setResourceRoot('/folder1/public/'); mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');
3. 清理路由缓存
在服务器终端执行以下命令,清除路由缓存避免解析异常:
php artisan route:clear
4. 检查服务器环境与权限
- 确认Hostinger已启用
mod_rewrite模块(可通过cPanel的Apache模块管理页验证) - 将
public目录权限设为755,目录内文件权限设为644,确保Web服务器能读取静态资源
内容的提问来源于stack exchange,提问作者Juan Pablo Arango Lizcano
相关产品推荐
相关产品推荐

