You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在cPanel服务器上配置支持多子域名的Laravel应用?

解决cPanel上Laravel多子域名路由配置问题

你遇到的核心问题是cPanel中子域名的文档根目录配置错误,导致子域名请求没有经过Laravel的前端控制器(index.php)处理,直接展示了对应文件夹的内容。下面是一步步的解决方案:

1. 修正cPanel子域名的文档根目录

在cPanel创建子域名时,默认会自动生成对应文件夹(比如test.mydomain.com会指向public_html/test),但这不符合Laravel多域名路由的需求。我们需要让所有子域名和主域名共享同一个Laravel项目的public目录:

  • 登录cPanel,找到「子域名」管理选项
  • 找到你创建的test.mydomain.com,点击「编辑」或「管理」按钮
  • 将「文档根目录」修改为和主域名完全一致的路径,比如你的Laravel项目放在public_html下,路径就是/home/你的用户名/public_html/public(可以查看主域名的文档根配置确认具体路径)
  • 保存修改

2. 确保public目录的.htaccess配置正确

Laravel默认的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}]

    # 移除末尾斜杠(非文件夹请求)
    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>

这个配置会把所有非文件、非文件夹的请求都转发到index.php,让Laravel来解析你的域名路由规则。

3. 清除Laravel缓存

为了确保新的路由规则生效,登录服务器终端(或使用cPanel的「终端」工具),进入Laravel项目根目录,运行以下命令:

php artisan route:cache
php artisan config:cache

这会清除旧的路由和配置缓存,让Laravel加载最新的路由逻辑。

4. 测试验证

现在访问test.mydomain.com,应该会显示你路由中定义的DOMAIN TEST.MYDOMAIN.COM;主域名mydomain.com也会正常展示对应内容,问题就解决了。

额外注意事项

  • 如果你的Laravel项目不是放在public_html根目录(比如放在public_html/laravel-app),文档根目录需要改为/home/你的用户名/public_html/laravel-app/public
  • 确保服务器开启了mod_rewrite模块(cPanel中一般默认开启,若未开启可在「Apache模块」中启用)

内容的提问来源于stack exchange,提问作者João

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:57:29