假设你有一个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
。
无论如何,问题是,您如何将不存在的子域重定向到相应的父域而不重定向现有的子域?
答案 0 :(得分: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地址比通过主机名更好地解决。