Apache 中的动态虚拟主机,带有 www 和非 www 子域名

Apache 中的动态虚拟主机,带有 www 和非 www 子域名

我不太了解 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,这不会很好地工作。

几个不同的选择:

  1. 在两种情况下都将something其用作所寻找的目录;不要查看名称的第一部分,而是查看倒数第三部分:

    VirtualDocumentRoot /var/www/sites/%-3/
    
  2. 切换到使用全名,然后创建一个符号链接(参见迈克尔的回答):

    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 的回答一样。所以也这样做。)

相关内容