将Laravel项目部署到Hostinger子目录后静态资源加载失败求助
解决Laravel部署到Hostinger后资源加载404问题
1. 确认Hostinger网站根目录配置
Hostinger默认将网站根目录设置为public_html,而Laravel的前端资源必须从public目录对外提供访问。你需要:
- 将Laravel项目
public文件夹下的所有文件和子文件夹,完整复制到Hostinger的public_html目录中; - 若Hostinger支持自定义根目录,可直接将域名的根目录指向Laravel项目的
public文件夹(通过主机面板的域名管理功能设置)。
2. 修正前端资源引用代码
public_path()是服务器端的文件路径函数,不能直接用于前端HTML。改用Laravel提供的asset()辅助函数生成正确的资源URL:
<script src="{{ asset('js/jquery.js') }}"></script> <script src="{{ asset('js/bootstrap.min.js') }}"></script> <script src="{{ asset('fonts/fontawesome/all.min.js') }}"></script> <script src="{{ asset('js/chartjs.js') }}"></script> <script src="{{ asset('js/camerajs.js') }}"></script>
如果你的项目使用Laravel Mix编译资源,建议使用mix()函数(会自动处理版本号):
<script src="{{ mix('js/jquery.js') }}"></script>
3. 检查.htaccess配置
确保public_html(或Laravel的public)目录下的.htaccess文件包含Laravel默认的重写规则:
<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}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
如果Hostinger使用Nginx环境,需配置对应的伪静态规则(可联系Hostinger客服获取模板)。
4. 清除Laravel缓存
部署完成后执行以下命令清除缓存,确保配置和路由生效:
php artisan config:clear php artisan cache:clear php artisan route:clear php artisan view:clear
若无法通过SSH执行命令,可在项目根目录创建临时PHP脚本执行上述命令,完成后删除该脚本。
内容的提问来源于stack exchange,提问作者Ahmed Nasser
相关产品推荐
相关产品推荐

