2012-07-04 25 views
1

假設你有一個Apache2的虛擬主機設置,這樣的事情:阿帕奇mod_rewrite的任何子域(縣)根域,除非存在,因爲virtualdocumentroot

/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

無論如何,問題是,您如何將不存在的子域重定向到其對應的父域而不重定向現有的子域?

回答

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地址比主機名更少,更好解決。