我确信我不是第一个遇到这个问题的人,但是我无论如何都找不到答案——尽管这可能是因为不知道要搜索什么。
我需要在 Ubuntu 服务器上托管许多客户网站。一切运行良好,但我想设置动态虚拟主机,以便我可以自动在服务器上创建 wordpress 网站。我的mod_vhost_alias
模块已经运行,对此感到满意,但是,我遇到了.com
域与.co.uk
域.com.au
之间的问题,并且VirtualDocumentRoot
对于诸如这样的域,example.com
我希望所有请求都www.exapmple.com
指向example.com
一个名为的目录/var/webroot/example.com
,例如,对于诸如这样的域example.co.uk
,我希望所有请求都www.example.co.uk
指向example.co.uk
一个名为的目录/var/webroot/example.co.uk
我目前拥有的 VDR 如下所示...
VirtualDocumentRoot /var/webroot/%-2.0.%-1.0
它抓取了倒数第二部分和最后一部分。这对于 来说很有效,example.com
但是对于 来说example.co.uk
它正在寻找目录/var/webroot/co.uk
- 这并不理想!
有办法解决这个问题吗?我需要使用吗mod_rewrite
?如果需要,如何使用?
答案1
在这种情况下,我只需打破符号链接,而不是使用非常具体的(并且可能很脆弱的)RewriteRule
:
使用VirtualDocumentRoot /var/webroot/%0
,然后在其中/var/webroot/
创建一个www.example.com
指向 真实目录的符号example.com
链接。这将适用于您需要的任何深度的域,此外,如果您的站点www
由于某种原因应该具有不同的内容,或者您想要指向aaa.example.com
与 相同的内容,则它会更加灵活example.com
。
如果这不符合你的口味,那么你确实可以使用mod_rewrite
:
DocumentRoot /var/webroot
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^/(.*)$ /%2/$1
它只会始终在 中查找域名/var/webroot
,www
如果在查找之前有域名,则将其前面的 撕掉。
或者,您也可以重定向以删除(或添加)www
所有请求,而不是为两个域提供相同的内容。