【问题标题】:Apache 2.2 ignoring VirtualDocumentRoot VirtualHosts?Apache 2.2 忽略 VirtualDocumentRoot 虚拟主机?
【发布时间】:2010-10-21 14:53:54
【问题描述】:

我有几个域希望通过 mod_vhost_alias 启用通配符子域

在我的 httpd.conf 中包含以下通用规则:

<VirtualHost [ip here]:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
    ServerName *.domain1.com
    VirtualDocumentRoot /home/user1/subdomains/%-3+
</VirtualHost> 

<VirtualHost [ip here]:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /home/user2/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
    ServerName *.domain2.com
    VirtualDocumentRoot /home/user2/subdomains/%-3+
</VirtualHost>

问题是 apache 完全忽略了带有通配符 ServerNames 的虚拟主机。对 test.domain1.com 或 test.domain2.com 的任何请求都只会显示 /home/user1/public_html 的内容(根据 apache 的默认规则)。

其他一些信息:

/home/user1/subdomains/test/home/user2/subdomains/test 都存在并且其中有文件

我的所有域都有一个在绑定配置中列出的通配符子域,它们指向 Vhost 规则中指定的相同 IP。子域的标准 Vhost 规则有效,但通配符无效。

httpd -S 输出的剪辑版

# httpd -S
虚拟主机配置:
[ip here]:80 是 NameVirtualHost
         默认服务器 domain1.com (/etc/httpd/sites/user1:1)
         端口 80 namevhost domain1.com (/etc/httpd/sites/user1:1)
         端口 80 namevhost *.domain1.com (/etc/httpd/sites/user1:14)
         端口 80 namevhost domain2.com (/etc/httpd/sites/user2:1)
         端口 80 namevhost *.domain2.com (/etc/httpd/sites/user2:14)
语法OK
# httpd -M
加载模块:
 核心模块(静态)
 mpm_prefork_module(静态)
 http_module(静态)
 so_module(静态)
 rewrite_module(共享)
 auth_basic_module(共享)
 authz_host_module(共享)
 包含模块(共享)
 log_config_module(共享)
 logio_module(共享)
 mime_magic_module(共享)
 mime_module(共享)
 vhost_alias_module(共享)
 dir_module(共享)
 suexec_module(共享)
 php5_module(共享)
 suphp_module(共享)
 ssl_module(共享)
语法OK

任何关于问题所在的建议将不胜感激。

【问题讨论】:

    标签: apache2 virtualhost apache httpd.conf


    【解决方案1】:

    我是个菜鸟,这是一个非常简单的解决方案。

    ServerName 不允许使用通配符,但 ServerAlias 允许,所以我只是再次复制了服务器名。

    这是任何碰巧找到此答案的域的最终最小化配置(当您在谷歌上搜索并找到问题但没有答案时,我讨厌它):

    <VirtualHost [ip here]:80>
        ServerName domain1.com
        ServerAlias www.domain1.com
        DocumentRoot /home/user1/public_html
    </VirtualHost>
    <VirtualHost [ip here]:80>
        ServerName domain1.com #<-- The fix. Wildcards not supported in ServerName
        ServerAlias *.domain1.com
        VirtualDocumentRoot /home/user1/subdomains/%-3+
    </VirtualHost>
    

    【讨论】:

    • 可以在 VirtualDocumentRoot 中使用通配符吗?
    • 嗯,这是我不活跃的一个超级迟到的回复,你可能不会看到它,但也许其他人会。 是的,这就是 %-3+ 所做的,它从右边的第 3 部分(由点分隔)开始的所有内容以及它之前的所有内容。对于http://subsub.sub.domain1.com,它将使用/home/user1/subdomains/subsub.sub/ 作为它的documentroot。
    • @Kyle 和 Mike 实际上没有通配符(“***”),只是它的specific parameters 更像substr。另外我相信VirtualDocumentRoot实际上是在&lt;VirtualHost&gt;之外使用,我们可以通过在内部使用来限制它。
    【解决方案2】:

    大卫,这个解决方案可以在成功时停止 mod_rewrite 循环,这将对您的问题有用)。

    重写循环停止器:

    重写条件 %{ENV:REDIRECT_STATUS} 200|[45]0[0-9] 重写规则 .* - [L]

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 2013-05-22
      • 2019-11-14
      • 2018-02-08
      • 1970-01-01
      • 2011-07-31
      • 2010-11-02
      • 1970-01-01
      • 2011-03-19
      相关资源
      最近更新 更多