2010-11-27 126 views
2

我有一堆域指向同一個文件夾,即我的主機「public_html」的根目錄。 我希望我可以重定向他們,每一個與域名同名的文件夾。mod_rewrite:重定向到與域名同名的文件夾

如:重定向www.mydomain.com爲 「的public_html/www.mydomain.com」

我嘗試這樣做:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/.*$ 
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L] 

,但沒有成功。怎麼了? 它甚至有可能重定向到名稱上使用'點'的文件夾?

謝謝先進。

+0

您的RewriteCond看起來很腥 - 「!」意味着否定,你所說的是你不希望重寫適用於任何與主機匹配的請求,斜線,然後是任何文本,所以據我所知,你實際上在說沒有URL將匹配,因此該規則將永遠不會應用。 – Roadmaster 2010-11-27 02:45:40

+0

我試圖建議的是:if%{REQUEST_URI} NOT(!)^ /%{HTTP_HOST} /.*$ RewriteRule ^(。*)$ /%{HTTP_HOST}/$ 1 [L]。 – 2010-11-27 03:09:13

回答

3

RewriteCond中的測試模式實際上是試圖匹配從文字字符串/%{HTTP_HOST}/開始的輸入。變量%{HTTP_HOST}的值不會像您所期望的那樣擴展,所以條件將始終爲真(模式本身永遠不會匹配)。你需要修改RewriteCond,並且有幾種不同的方法。

如果這是你執行的唯一重寫,你可以檢查,看看是否你已經這麼做過:

RewriteCond %{ENV:REDIRECT_STATUS} ="" 

或者,如果資源不存在,直到你改寫它,你可以檢查是不是:

RewriteCond %{REQUEST_FILENAME} !-f 

最後,您可以通過使用測試圖案中的反向引用模仿你的原始狀態,與不會出現在你的URL分隔符一起:

RewriteCond /%{HTTP_HOST}/#%{REQUEST_URI} !^([^#]+)#\1 

請注意,這並不能保證您已經完成了重定向,但它僅確保請求URI的主機名爲第一個路徑段。但是,這通常足夠好。

相關問題