/htdocs/parent1.com /htdocs/sub1.parent1.com /htdocs/sub2.parent1.com /htdocs/parent2.net /htdocs/parentn.org
假设您希望使用VirtualDocumentRoot /htdocs/%0
来执行此操作,以便您可以添加和删除虚拟主机,而无需修改Apacheconfiguration。 这一点很重要:请不要在每次虚拟主机进入或离开时都使用htaccess文件或httpd.conf – 无论该主机是否为父域。 事实上,假设你正在使用AllowOverride None
。
无论如何,问题是,如何将不存在的子域redirect到其对应的父域而不redirect已存在的子域呢?
我可能已经解决了我自己的问题。 不过,如果有人发现我正在做的事情有问题,我将不胜感激。
只要存在相应的文档根目录,下面就将任何请求留给任意的子域名; 但将任何请求重定向到文件系统中不存在的子域。
<Ifmodulee rewrite_module> RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "/htdocs/${lowercase:%{HTTP_HOST}}" !-d RewriteCond %{HTTP_HOST} "\.([^\.]+\.[^\.]+)$" RewriteRule ^/(.*)$ "http://%1/$1" [R=301] </Ifmodulee>
允许我设置通配符DNS并使用基于名称的虚拟主机,而无需触摸任何配置设置。 另外,没有htaccess涉及。 只需使用“/htdocs/[host.]domain.tld”之类的名称制作文件夹,然后启动并运行。 据我所知,这实际上不适用于SSL / TLS(可能与%{HTTP_HOST}
?),但安全站点通过IP地址比主机名%{HTTP_HOST}
,更好解决。