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

如何配置vhost.conf实现子域名指向同服务器的另一Laravel站点

配置问题排查与修复方案

现有配置的错误点

  • 子域名配置中的Rewrite规则完全无效:%{SERVER_NAME}仅匹配域名部分,不包含任何路径后缀,你写的RewriteCond %{SERVER_NAME} =subdomain.site1.org/site2永远不会命中,多余的规则还可能干扰正常配置
  • 路径匹配优先级问题:如果存在默认虚拟主机(比如Apache自带的000-default.conf)加载顺序早于你的子域名配置,且默认主机的DocumentRoot指向/var/www/html,就会出现访问子域名打开根目录index.html的情况
  • 额外错误:主站site1的Directory配置缺少根路径前缀,写为"var/www/html/site1/",正确写法应为"/var/www/html/site1/"
  • 注意Laravel规范:如果你的site2目录是完整的Laravel项目,默认入口文件在public目录下,当前DocumentRoot直接指向site2目录本身也是配置错误

修复步骤

  1. 删掉子域名虚拟主机里的错误Rewrite规则段,修正后的子域名配置如下:
<VirtualHost *:80>
    DocumentRoot /var/www/html/site2
    # 要是标准Laravel项目,上面一行改成 DocumentRoot /var/www/html/site2/public
    ServerName subdomain.site1.org
    CustomLog logs/subdomainsite1org-access.log common
    AddDefaultCharset UTF-8
    <Directory "/var/www/html/site2/">
        # 对应上面改了public的话这里也改成"/var/www/html/site2/public/"
        Options ExecCGI FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>
  1. 调整虚拟主机加载优先级:Apache会按配置文件名的字典序加载配置,优先匹配先加载的规则,你可以把子域名配置的文件名改为主站配置之前,比如子域名为001-subdomain.conf,主站为002-site1.conf,同时禁用默认的000-default.conf配置
  2. 确认路径一致性:检查你的站点实际目录是不是和配置里的/var/www/html/xxx完全匹配,如果你的www目录直接在根路径下,就把配置里的路径改为/www/html/xxx
  3. 验证配置并重启服务:
    • 运行apache2ctl configtest(Debian/Ubuntu)或httpd -t(CentOS/RHEL)确认配置语法无误
    • 运行systemctl restart apache2(Debian/Ubuntu)或systemctl restart httpd(CentOS/RHEL)重启服务生效

验证方法

执行apache2ctl -S(Debian/Ubuntu)或httpd -S(CentOS/RHEL)查看已加载的虚拟主机列表,确认subdomain.site1.org对应的根目录为你设置的/var/www/html/site2即可。

内容的提问来源于stack exchange,提问作者masomi79

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 04:12:06