mod_vhost_alias VirtualDocumentRoot许多域

我确信我不是第一个遇到这个问题的人,但我不能在我的生活中find答案 – 尽pipe这可能是不知道要search什么的。

我需要在Ubuntu服务器上托pipe许多客户端网站。 一切运行良好,但我想build立dynamic的虚拟主机,这样我就可以自动在服务器上创build一个WordPress的网站的过程。 我有mod_vhost_alias模块工作,并很高兴,但是,我遇到了一个问题与.com域vs .co.uk.com.au域和VirtualDocumentRoot

对于像example.com这样的域名,我希望所有的请求都可以通过www.exapmple.comexample.com指向一个名为/var/webroot/example.com的目录,而example.com等域名希望所有的请求www.example.co.ukexample.co.uk指向一个名为/var/webroot/example.co.uk的目录

我现在的VDR看起来像这样

VirtualDocumentRoot /var/webroot/%-2.0.%-1.0

这抓住了倒数第二和最后的部分。 这适用于example.comexample.co.uk是在/var/webroot/co.uk寻找一个目录 – 这是不理想的!

有没有解决的办法? 我是否需要使用mod_rewrite ,如果是的话,如何?

这种情况下,我只是打破了符号链接,而不是使用一个非常具体的(可能是脆弱的) RewriteRule

使用VirtualDocumentRoot /var/webroot/%0 ,然后在/var/webroot/www.example.com创build一个指向example.com真实目录的符号链接。 这将适用于您所需要的深层领域,除此之外,如果您有某个网站因某种原因需要使用不同内容的网站,或者您希望将aaa.example.com指向与example.com相同的内容,那么该网站会更加灵活example.com

如果这不符合你的喜好,那么你确实可以使用mod_rewrite

 DocumentRoot /var/webroot RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ RewriteRule ^/(.*)$ /%2/$1 

这只会在/var/webroot查找域名,如果在查找之前www从前面去掉了。

或者,您也可以redirect以将www移除(或添加)到所有请求,而不是为这两个域提供相同的内容。