2011-05-24 58 views
1

我有一個情況,我有幾個客戶端,其中每一個我想能夠通過mydomain.com/clientname訪問他們的網站。爲了保持組織性,我將客戶站點的實際文件存儲在/ client/clientname中。國防部重寫目錄檢查

RewriteRule ^client1(.*)$ /client/client1$1 [L] 
RewriteRule ^client2(.*)$ /client/client2$1 [L] 

我試圖做到這一點更清潔的方式,通過在客戶端目錄檢查:我可以把很多很多這些線在我的.htaccess達到預期的效果存在於/客戶端或不在。 (如果我確定它不是一個有效的文件或目錄)。但由於某種原因,這似乎不工作:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond /client/%{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ /client/$1 [L,QSA] 

我錯過了什麼?

回答

3

Apache mod_rewrite docs

REQUEST_FILENAME

文件或腳本符合要求,如果這已經由當時REQUEST_FILENAME服務器確定完整的本地文件系統路徑被引用。否則,例如在虛擬主機上下文中使用時,其值與REQUEST_URI相同。

你行:

RewriteCond /client/%{REQUEST_FILENAME} -d 

似乎會導致問題,因爲它使阿帕奇查找下列文件路徑:

/client/[the whole filesystem path of requested file] 

這是相當肯定不是你想要的。究竟

RewriteCond %{DOCUMENT_ROOT}/client%{REQUEST_URI} -d 
+0

它:

您可以按如下更正!謝謝。不幸的是,我很清楚這不會那麼容易。由於我認爲像/客戶端/訂單(這不是一個目錄),如果我想檢查一個目錄,我需要對請求URI做一些棘手的事情 – 2011-05-24 18:50:29

+0

@epalla我不知道我是否明白了,你可以嘗試RewriteCond%{DOCUMENT_ROOT}/client%{REQUEST_URI} -f(而不是-d)。 – 2011-05-24 21:15:56

+0

我在這裏創建了一個後續問題:http://stackoverflow.com/questions/6115775/rewrite-condition-to-compare-top-level-directory-from-request-uri – 2011-05-24 22:04:33