我注意到一些托pipe提供商已经安装了Apache,所以如果我创build一个目录(foo.example.com),Apache将自动知道foo.example.com的DNS条目路由到该文档根目录。
我要做的是设置这样的东西:
<VirtualHost *:80> ServerName *.example.com DocumentRoot /home/user/*.example.com </VirtualHost>
DocumentRoot将根据ServerName通配符中的模式进行匹配。
在这样做的时候,我需要做的就是在configuration完成后创build/home/user/foo.example.com ,而不需要在Apache中修改任何东西。 这将允许我即时添加子域,而无需重新启动或重新加载甚至编辑Apache中的任何内容。
用例就是这样的。
mkdir /home/user/baz.example.com/ 在哪里我不需要做任何事情,只是简单地做目录。
VirtualDocumentRoot应该做的伎俩。
<VirtualHost *:80> ServerName catchall.invalid ServerAlias * VirtualDocumentRoot /home/user/%0 </VirtualHost>
与我合作过的最后一家网站公司做了类似的事情,而不是在Apacheconfiguration中对其进行硬编码,我们希望将configuration存储在数据库中,允许我们在任何时候更新它,并随时调整。
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,在数据库中存储虚拟主机configuration的好信息。
我想我没有足够的业力来添加评论,所以我会添加一个答案。 史蒂夫·麦登的答案是正确的。
如果你想在你的本地机器上创build一个开发域(例如mycomputer.dev),你可以使用VirtualDocumentRoot技巧,同时运行一个本地的DNS服务器。 然后,当你想开始一个新的网站,只需创build目录。 没有编辑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/
如果你“只”想要做你在问题的最后部分所expression的内容,那么就这样做:
<VirtualHost *:80> ServerName *.example.com DocumentRoot /home/user/foo.example.com </VirtualHost>
而你被设置。