Apache 2.2 忽略 VirtualDocumentRoot VirtualHosts?

发布于 2024-07-17 05:40:55 字数 2018 浏览 8 评论 0原文

我有几个域,我想通过 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 都存在并且其中包含文件

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

httpd -S 输出的截取版本

# httpd -S
VirtualHost configuration:
[ip here]:80      is a NameVirtualHost
         default server domain1.com (/etc/httpd/sites/user1:1)
         port 80 namevhost domain1.com (/etc/httpd/sites/user1:1)
         port 80 namevhost *.domain1.com (/etc/httpd/sites/user1:14)
         port 80 namevhost domain2.com (/etc/httpd/sites/user2:1)
         port 80 namevhost *.domain2.com (/etc/httpd/sites/user2:14)
Syntax OK
# httpd -M
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 rewrite_module (shared)
 auth_basic_module (shared)
 authz_host_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 vhost_alias_module (shared)
 dir_module (shared)
 suexec_module (shared)
 php5_module (shared)
 suphp_module (shared)
 ssl_module (shared)
Syntax OK

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

I have several domains that I would like to have wildcard subdomains enabled for through mod_vhost_alias

Included in my httpd.conf I have the following generalized rules:

<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>

The problem is that apache is completely ignoring the virtualhosts with the wildcard ServerNames. Any request for test.domain1.com or test.domain2.com will just show the contents of /home/user1/public_html (the default rule according to apache).

Some other information:

/home/user1/subdomains/test and /home/user2/subdomains/test both exist and have files in them

All my domains have a wildcard subdomain listed in bind config, and they are pointing to the same IP specified in the Vhost rules. Standard Vhost rules for subdomains work, but not wildcard.

A snipped version of the output of httpd -S

# httpd -S
VirtualHost configuration:
[ip here]:80      is a NameVirtualHost
         default server domain1.com (/etc/httpd/sites/user1:1)
         port 80 namevhost domain1.com (/etc/httpd/sites/user1:1)
         port 80 namevhost *.domain1.com (/etc/httpd/sites/user1:14)
         port 80 namevhost domain2.com (/etc/httpd/sites/user2:1)
         port 80 namevhost *.domain2.com (/etc/httpd/sites/user2:14)
Syntax OK
# httpd -M
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 rewrite_module (shared)
 auth_basic_module (shared)
 authz_host_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 vhost_alias_module (shared)
 dir_module (shared)
 suexec_module (shared)
 php5_module (shared)
 suphp_module (shared)
 ssl_module (shared)
Syntax OK

Any suggestions as to what the problem is would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海拔太高太耀眼 2024-07-24 05:40:55

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

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>

I'm such a noob, it was a real simple solution.

ServerName does not allow wildcards, but ServerAlias does, so I just duplicated the servername again.

Here is the final minimized config for domains anyone who happens to find this answer (I hate it when you search on google and find questions but no answers):

<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>
简美 2024-07-24 05:40:55

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

重写循环停止器:

RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9]
RewriteRule .* - [L]

David, this solution that stops mod_rewrite cycle when success will be useful for your problem).

Rewrite round-robin stopper:

RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9]
RewriteRule .* - [L]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文