在 apache 上创建新的虚拟主机时是否包含 www. 子域名有关系吗?
那么是这样吗?
/etc/apache2/sites-available/www.example.com
比这更好吗?
/etc/apache2/sites-available/example.com
我认为我需要 a2ensite www.example.com 或 example.com。取决于使用哪种方法?
这可能是一个相当基本的问题,但我没有其他人可以问。而且,我想把事情做好。
答案1
您不需要为此创建两个单独的虚拟主机 - 只需使用指令ServerAlias
:
<Virtualhost *:80>
ServerName example.com
ServerAlias www.example.com
...
</VirtualHost>
答案2
我想比 EEAA 更进一步,说你放置虚拟主机的模式很重要,因为你可以在最后添加一个单一的全能虚拟主机来捕获一切尚未捕获,并在其前面添加了 www。
举例来说,您可以像这样设置您的主级域名:
<Virtualhost *:80>
ServerName www.example.com
...
</VirtualHost>
<Virtualhost *:80>
ServerName www.example1.com
...
</VirtualHost>
然后在主域名之后添加任何特定的子域名(假设您甚至使用子域名……我确实使用子域名,所以这对我来说是一个问题):
<Virtualhost *:80>
ServerName test.example.com
...
</VirtualHost>
<Virtualhost *:80>
ServerName beta.example2.com
...
</VirtualHost>
在 vhosts 文件的最后,添加一个 catch-all 重定向器。此重定向器会捕获任何尚未捕获的域名,并在其前面添加 www。本质上,vhosts 文件如下所示:
<Virtualhost *:80>
ServerName *.example.com
ServerName *.example1.com
ServerName *.example2.com
...
</VirtualHost>
然后,您将获得一些基本的 PHP 操作(在最后一个 vhost 内......将其视为一个单独的站点!),获取主域名并在其前面放置一个 www,然后将其作为 HTTP 301 发送回客户端。
我现在没有可用的 PHP 代码,但是我以前用过,而且它可以非常巧妙地保持你的 vhosts 文件精简。
关键在于,人们会输入错误。很多时候他们会输入正确的域名,但会搞砸其他东西。很多老用户(比如我)仍然出于习惯在域名前面输入“www”。有时我会不小心输入四个 w。所以问题就出在这里。如果你使用子域名,这个工具也可以帮到你。