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

Apache VirtualHost中基于反向DNS notation动态设置DocumentRoot方案问询

配置实现方案

该需求可以实现,单独使用mod_vhost_alias无法适配任意层级域名的无冗余拼接,我们可以通过mod_vhost_alias搭配mod_rewrite处理冗余字符的方案实现,兼容性强且无需调用外部脚本,最多可支持预设的域名层级(以下示例默认支持最多8层域名,覆盖绝大多数使用场景)。

前置要求

确保Apache已经启用以下两个模块:

  • mod_vhost_alias
  • mod_rewrite

完整配置示例

<VirtualHost *:80>
    UseCanonicalName Off
    # 按最大支持8层域名拼接反向DNS路径,不存在的域名段自动返回空值
    VirtualDocumentRoot "/domains/%-1.0.%-2.0.%-3.0.%-4.0.%-5.0.%-6.0.%-7.0.%-8.0/public"
    
    RewriteEngine On
    # 替换路径中连续出现的多个点为单个点
    RewriteCond %{DOCUMENT_ROOT} ^(.*?)\.{2,}(.*)$
    RewriteRule ^(.*)$ %1.%2/$1 [L]
    
    # 清理路径末尾多余的点
    RewriteCond %{DOCUMENT_ROOT} ^(.*)\.(/.*)$
    RewriteRule ^(.*)$ %1%2/$1 [L]
    
    <Directory /domains>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

配置说明

  • 拼接路径时超出实际域名层级的占位符会返回空值,仅会产生多余的点字符,不会出现无效内容
  • 两条重写规则会自动处理冗余的点字符,最终生成符合要求的路径:例如admin.example.com初始拼接得到com.example.admin....../public,处理后会变为com.example.admin/public,myshop.net初始拼接得到net.myshop....../public,处理后变为net.myshop/public,完全匹配需求
  • 如果需要支持超过8层的域名,仅需要在VirtualDocumentRoot的拼接规则中增加%-N.0格式的占位符即可,不会影响少层级域名的解析
  • 如需支持HTTPS,将上述配置复制到443端口的VirtualHost中,补充对应SSL证书配置即可正常使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03