我不太了解 Apache,在 configure 方面遇到了问题mod_vhost_alias
这是我的 httpd.conf 文件:
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
<Directory /var/www/sites/>
Options FollowSymLinks
AllowOverride All
</Directory>
<VirtualHost *:80>
CustomLog logs/access_log.sites vcommon
ServerAlias *.domain.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/sites/%1/
</VirtualHost>
子域名即使没有 www 也能正常工作,但我需要让它们在带有 www 的情况下也能工作。
以下是一个例子:
something.domain.com - site is loading
www.something.domain.com - Not Found
我应该怎么办?
答案1
VirtualDocumentRoot /var/www/sites/%1/
正在查看名称的第一部分 - 因此对于something.domain.com
它使用something
,并且对于www.something.domain.com
它使用www
,这不会很好地工作。
几个不同的选择:
在两种情况下都将
something
其用作所寻找的目录;不要查看名称的第一部分,而是查看倒数第三部分:VirtualDocumentRoot /var/www/sites/%-3/
切换到使用全名,然后创建一个符号链接(参见迈克尔的回答):
VirtualDocumentRoot /var/www/sites/%0/
答案2
something.domain.com
和显然是不同的主机名。Apache在查找要提供的文件时www.something.domain.com
会用 来代替。所以问题是不存在。%1
/var/www/sites/www.something.domain.com
修复此问题的一种方法(假设这两个站点应该提供相同的数据)是通过一个简单的符号链接:
ln -s something.domain.com /var/www/sites/www.something.domain.com
(我还错过了你需要的%0
而不是%1
,就像 Shane Madden 的回答一样。所以也这样做。)