如何在HostGator共享主机的非根域名部署Laravel应用
我之前有过Laravel部署到HostGator企业共享主机附加域名的实操经验,给你整理了一套一步步的操作指南,应该能帮到你:
部署Laravel到HostGator企业共享主机附加域名
1. 理清附加域名的目录结构
HostGator的附加域名默认会在public_html下生成对应子目录,比如你的附加域名是myapp.com,系统会自动创建public_html/myapp.com作为初始文档根目录。但Laravel要求必须把public文件夹设为网站根目录,这是核心要点,后面会调整。
2. 上传Laravel项目文件
有两种常用方式:
- 打包上传:把本地Laravel项目打包成ZIP(记得排除
node_modules、.env.local这类冗余文件),通过cPanel的「文件管理器」上传到public_html/myapp.com目录,然后解压。 - Git克隆:如果项目托管在Git仓库,登录HostGator的SSH(企业共享主机默认支持),进入
public_html/myapp.com目录,执行:
克隆完成后切换到生产分支即可。git clone 你的仓库地址 .
3. 调整附加域名的文档根目录
这一步是部署成功的关键:
- 登录cPanel,找到「Domains」分类下的「Addon Domains」。
- 找到你的附加域名,点击右侧的设置图标(部分版本显示为「Document Root」选项),把默认的
public_html/myapp.com修改为public_html/myapp.com/public。 - 保存设置,HostGator会自动更新服务器配置。
4. 配置.env文件
- 在项目根目录复制
.env.example并重命名为.env,通过cPanel文件管理器编辑:- 把
APP_URL设为你的附加域名,比如APP_URL=https://myapp.com - 填写数据库信息:在cPanel的「MySQL Databases」里创建好数据库、用户并授权,把对应的
DB_DATABASE、DB_USERNAME、DB_PASSWORD填进去 - 生成应用密钥:打开cPanel的「Terminal」工具,进入项目根目录执行:
php artisan key:generate
- 把
5. 设置正确的文件权限
HostGator共享主机对权限要求严格,必须确保以下目录权限正确:
- 给
storage和bootstrap/cache目录设置755权限,目录内文件设为644 - 可以通过SSH执行命令快速设置:
也可以在文件管理器里右键目录,手动修改权限。chmod -R 755 storage bootstrap/cache chmod -R 644 storage/** bootstrap/cache/**
6. 测试访问与问题排查
现在访问你的附加域名,如果能看到Laravel的欢迎页面,就说明部署成功了。如果遇到500错误:
- 先检查
.env文件的数据库、APP_URL配置是否正确 - 查看
storage/logs目录下的错误日志,定位具体问题 - 确认HostGator的PHP版本和你的Laravel版本兼容(比如Laravel 10需要PHP 8.1+),可以在cPanel的「Select PHP Version」里切换版本
额外注意:伪静态配置
Laravel的路由依赖URL重写,public目录下默认已经有.htaccess文件,如果访问路由出现404,可以检查文件是否存在,或者补充以下内容到public/.htaccess:
<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>
内容的提问来源于stack exchange,提问作者kangular
相关产品推荐
相关产品推荐

