1

假设您有一个 Apache2 虚拟主机设置,如下所示:

/htdocs/parent1.com
/htdocs/sub1.parent1.com
/htdocs/sub2.parent1.com
/htdocs/parent2.net
/htdocs/parentn.org

假设您想使用 来执行此操作VirtualDocumentRoot /htdocs/%0,这样您就可以添加和删除虚拟主机,而无需修改您的 Apache 配置。这很重要:请不要在每次虚拟主机进出时都弄乱 htaccess 文件或 httpd.conf - 无论该主机是否是父域。实际上,假设您正在使用AllowOverride None.

无论如何,问题是,您如何 301 将不存在的子域重定向到其相应的父域而不重定向现有的子域?

4

1 回答 1

1

我可能已经解决了我自己的问题。但是,如果有人发现我正在做的事情有问题,我将不胜感激。

只要存在相应的文档根,以下内容就只剩下对任意子域的任何请求;但将任何请求重定向到文件系统中不存在的子域。

<IfModule rewrite_module>
    RewriteEngine On
    RewriteMap lowercase int:tolower
    RewriteCond "/htdocs/${lowercase:%{HTTP_HOST}}" !-d
    RewriteCond %{HTTP_HOST} "\.([^\.]+\.[^\.]+)$"
    RewriteRule ^/(.*)$ "http://%1/$1" [R=301]
</IfModule>

允许我设置通配符 DNS 并使用基于名称的虚拟主机,而无需触及任何配置设置。此外,不涉及 htaccess。只需使用“/htdocs/[host.]domain.tld”之类的任何名称创建您的文件夹,您就可以启动并运行。据我所知,这实际上不适用于 SSL/TLS(可能与%{HTTP_HOST}?),但是安全站点相对较少,并且通过 IP 地址比通过主机名更好地解决。

于 2012-07-04T13:44:37.370 回答