![Apache 上动态大规模虚拟主机的规范重定向](https://linux22.com/image/503928/Apache%20%E4%B8%8A%E5%8A%A8%E6%80%81%E5%A4%A7%E8%A7%84%E6%A8%A1%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%A7%84%E8%8C%83%E9%87%8D%E5%AE%9A%E5%90%91.png)
我在 Apache 上有一个 Web 应用程序,允许用户将他们的域指向服务器。
现在我正在使用 Apache 的动态海量虚拟主机,其中有一个条目 VirtualDocumentRoot /www/hosts/%0/docs
因此 www.companydomain.com 指向 /www/hosts/www.companydomain.com/docs
问题是当用户访问 companydomain.com 时,它将指向 /www/hosts/companydomain.com/docs
有没有一种简单的方法可以让 Apache 自动检查虚拟主机是否存在目录,如果不存在,则查找前面带有“www.”的主机名?其他子域名都可以(例如 abc.domain.com 应该指向与 def.domain.com 不同的目录),但整个“www”问题对我来说是个谜。
我使用的是动态大规模虚拟主机,因此每次注册应用程序后服务器不必重新启动。如果有其他方法,只要 apache 不每次都重新启动,那就没问题。
我该如何实现这一点?最坏的情况是,如果有一种方法可以重定向到服务器上的“默认”位置(如果未找到),我总是可以通过 PHP 或其他方式进行检查,但我觉得这有点混乱,必须有更有效的方法。
提前致谢!
答案1
我想我会-d directory
研究 RewriteCond 的选项,以测试此虚拟主机是否存在目录,如果不存在,则明确重定向到 www.example.com。这样人们在看到不期望的页面时就不会感到震惊,并且可以防止搜索引擎多次索引。
答案2
modules/mappers/mod_vhost_alias.c 第 458 行
if (strncasecmp(name,"www.",4) == 0) {
name+=4;
}