在Hostinger子域名部署Laravel项目遭遇403错误求助
解决Hostinger子域名部署Laravel的403/默认页面问题
问题根源
Hostinger默认把子域名根目录指向public_html/subdomain,但Laravel的入口文件是public/index.php,直接克隆项目到该目录会导致Web服务器找不到正确入口;同时目录权限配置不当也会触发403错误。
分步解决方法
1. 修改子域名根目录指向
- 登录Hostinger后台,进入域名管理找到你的子域名,点击修改根目录
- 将根目录从
public_html/subdomain改为public_html/subdomain/public(即Laravel项目的public文件夹) - 保存设置,等待1-2分钟生效
2. 修复目录与文件权限
通过SSH连接主机后执行以下命令(替换user和domain.com为你的实际信息):
# 设置项目根目录权限 chmod 755 /home/user/domains/domain.com/public_html/subdomain # 给storage和bootstrap/cache目录添加可写权限 chmod -R 775 /home/user/domains/domain.com/public_html/subdomain/storage chmod -R 775 /home/user/domains/domain.com/public_html/subdomain/bootstrap/cache # 设置public目录权限 chmod 755 /home/user/domains/domain.com/public_html/subdomain/public
3. 配置Laravel的.htaccess文件
如果public目录下没有.htaccess,创建新文件并写入以下内容:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理授权请求头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除URL末尾斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 所有请求转发到index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
然后设置文件权限:
chmod 644 /home/user/domains/domain.com/public_html/subdomain/public/.htaccess
4. 清理默认文件
删除public_html/subdomain目录下的default.php或其他Hostinger默认索引文件,避免服务器优先加载这些文件。
5. 配置环境变量
复制项目根目录的.env.example为.env,修改关键配置:
APP_URL=https://subdomain.domain.com APP_ENV=testing DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=你的测试数据库名 DB_USERNAME=数据库用户名 DB_PASSWORD=数据库密码
生成应用密钥:
php artisan key:generate
额外提示
- 由于Hostinger共享主机无Node.js,需在本地构建好
public/build目录后上传,或保持.gitignore移除该目录后直接推送代码,确保服务器上有完整静态资源。 - 若仍出现403,检查Hostinger安全模块是否开启了目录保护,可暂时关闭测试。
内容的提问来源于stack exchange,提问作者Davide Lobascio
相关产品推荐
相关产品推荐

