如果子域不存在

有没有办法在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中

我怎样才能解决这个问题?

您可以创build默认的VirtualHost,只要没有匹配的NamedVirtualHostconfiguration,就会触发该默认的VirtualHost。 这基本上就像你给的第一个例子。 然后,为所有你想要处理的域添加NamedVirtualHosts(例如添加ServerName www.example.com等)。

每当请求的虚拟主机未configuration时,默认情况下将提供该请求。 在这个你可能要显示特定的内容和/或触发redirect到一个现有的(或不同的)服务器。

您可能需要在VirtualHost块之前声明NameVirtualHost *:80

如果NameVirtualHost *:80或类似的东西还没有在您的configuration文件中,它必须是。 当您的虚拟主机使用相同的IP地址和端口(您的)时,这是必需的。 这告诉Apache它应该使用HTTP请求中的Host:头来select哪个VirtualHost应该处理这个请求。

如果使用NameVirtualHost,则还必须在每个VirtualHost中都有一个ServerName指令。 这是Apache与Host:头匹配的内容。 ServerName指令不能包含*字符。 ServerName必须完全匹配您的域。 如果你想匹配www.devhouse.nl以及devhouse.nl,那么你将需要一个ServerAlias指令。 您可以拥有尽可能多的ServerAlias指令,只需要一个ServerName即可。

 ServerName devhouse.nl ServerAlias www.devhouse.nl ServerAlias mail.devhouse.nl 

具有上述内容的VirtualHost将匹配发送到这三个域之一的HTTP请求。 任何其他请求将转到默认的VirtualHost。

在configuration文件中列出的第一个VirtualHost将成为默认的VirtualHost。 这是一个将处理请求,如果它不匹配任何其他VirtualHost。 如果你想把你第二个列出的那个作为默认值,你将不得不在文件中交换它们。

关于这个的Apache文档是相当不错的: http : //httpd.apache.org/docs/2.2/vhosts/examples.html

你可以让Apache列出你的VirtualHosts,以及命令apachectl -S (这是一个大写apachectl -S S)

Include在最后看起来很奇怪。 列表的第一部分是包含文件的内容吗?

如果所有这一切都不能立即采取,你需要在这里做的是:

  1. 交换两个虚拟主机。
  2. NameVirtualHost *:80放在它们之前。
  3. 摆脱*. 从ServerName指令或将其replace为www. 只要它是一个你想要匹配的域,那么在默认的VirtualHost中究竟会发生什么并不重要。
  4. 添加一个ServerName指令和可选的一些ServerAlias指令到第二个VirtualHost。