Apache 中的通配符子域路由

Apache 中的通配符子域路由

我注意到一些托管服务提供商已设置 Apache,因此如果我创建一个目录(foo.example.com),Apache 将自动知道 foo.example.com 的 DNS 条目路由到该文档根目录。

我要做的是设置如下内容:

<VirtualHost *:80>
   ServerName *.example.com
   DocumentRoot /home/user/*.example.com
</VirtualHost>

其中 DocumentRoot 将根据 ServerName 通配符的模式进行匹配。

这样,我需要做的就是/home/user/foo.example.com在配置完成后进行创建,而无需修改 Apache 中的任何内容。这样我就可以动态添加子域,而无需重新启动或重新加载,甚至无需编辑 Apache 中的任何内容。

用例可能是这样的。

  1. mkdir /home/user/baz.example.com/
  2. ??????
  3. 利润

我不需要做任何事情,只需创建目录即可。

答案1

VirtualDocumentRoot应该可以解决问题。

<VirtualHost *:80>
    ServerName catchall.invalid
    ServerAlias *
    VirtualDocumentRoot /home/user/%0
</VirtualHost>

答案2

我之前合作过的网站公司也做过类似的事情,我们不是在 Apache 配置中进行硬编码,而是将配置存储在数据库中,这样我们就可以随时更新它,并且它会在我们需要的时候进行调整。

http://blog.straylightrun.net/2009/07/31/storing-apache-virtual-hosts-in-a-database/

是我们用来实现这一目标的一篇博客文章。

http://code.google.com/p/dbd-modules/wiki/mod_vhost_dbd

mod vhost dbd wiki,关于在数据库中存储 vhost 配置的好信息。

答案3

我想我没有足够的 karma 来添加评论,所以我会添加一个答案。Ste​​ve Madden 的答案是正确的。

如果您想在本地机器上创建一个开发域(例如 mycomputer.dev),您可以使用该VirtualDocumentRoot技巧并运行本地 DNS 服务器来实现。然后,当您想要启动一个新网站时,只需创建目录即可。无需编辑 Apache,无需编辑主机文件,无需重新启动 Apache。

这篇博客文章是关于 *nix 的操作方法:

http://blog.sznapka.pl/dynamic-lamp-setup-for-localhost-development/

Windows 上的操作方法如下:

http://blog.straylightrun.net/2010/05/10/throw-away-your-hosts-file-developing-locally-with-bind/

答案4

如果你“只”想做你在问题最后一部分所表达的事情,那么就这样做:

<VirtualHost *:80>
   ServerName *.example.com
   DocumentRoot /home/user/foo.example.com
</VirtualHost>

您已设置完毕。

相关内容