apache2 中有没有办法为不存在的子域添加虚拟主机?
现在我试试这个:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName *.devhouse.nl
DocumentRoot /var/www/errors
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/errors/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
Include sites-available/devhouse.nl.vhost
(第二个虚拟主机)
但这不起作用。我在 /var/www 中看到的文件不在 /var/www/errors 中
我怎样才能解决这个问题?
您可以创建一个默认的 VirtualHost,只要没有配置匹配的 NamedVirtualHost,就会触发它。这基本上看起来像你给出的第一个例子。然后为您要处理的所有域添加 NamedVirtualHosts(例如添加
ServerName www.example.com
等)。每当请求未配置的虚拟主机时,默认将服务该请求。在此,您可能希望显示特定内容和/或触发重定向到现有(或不同)服务器。
您可能需要
NameVirtualHost *:80
在 VirtualHost 块之前声明。如果
NameVirtualHost *:80
您的配置文件中还没有或类似的东西,它必须是。当您的 VirtualHosts 使用相同的 IP 地址和端口(您的)时,这是必要的。这告诉 Apache 它应该使用 HTTP 请求中的 Host: 标头来选择哪个 VirtualHost 应该处理该请求。如果您使用 NameVirtualHost,您还必须在每个 VirtualHost 中有一个 ServerName 指令。这是 Apache 匹配 Host: 标头的内容。ServerName 指令不能包含 * 字符。ServerName 必须与您的域完全匹配。如果您想匹配 www.devhouse.nl 和 devhouse.nl,那么您将需要一个 ServerAlias 指令。您可以拥有任意数量的 ServerAlias 指令,但只有一个 ServerName。
具有上述内容的 VirtualHost 将匹配发送到这三个域之一的 HTTP 请求。任何其他请求都将转到默认的 VirtualHost。
配置文件中列出的第一个 VirtualHost 将成为默认的 VirtualHost。如果请求与任何其他 VirtualHost 不匹配,这将处理请求。如果您希望您列出的第二个成为默认值,则必须在文件中交换它们。
这方面的 Apache 文档非常好:http ://httpd.apache.org/docs/2.2/vhosts/examples.html
您可以让 Apache 列出您的 VirtualHosts 以及它们与命令一起出现的顺序
apachectl -S
(这是一个大写的 S)最后
Include
看起来很奇怪。清单的第一部分是包含文件的内容吗?万一所有这些都太多了,你需要在这里做的是:
NameVirtualHost *:80
两人面前。*.
ServerName 指令或将其替换www.
为默认 VirtualHost 中的内容并不重要,只要它是您要匹配的域即可。