2010-03-09 112 views
0

我有一個Web應用程序,有50個客戶端使用的一組文件,每個站點的所有配置都來自它們各自目錄中的config.php文件。這是通過PHP解析URL完成的。這一切工作正常,只是有自定義上傳文件的客戶端可以做,位於Apache Rewrite:目錄樹到子域目錄

/無功/網絡/網站/用戶1 /緩存

可以有多個子目錄的問題。因此,請求 http://user1.site.com/cache/subdir1/image.jpg 時,它需要從 /var/www/sites/user1/cache/subdir1/image.jpg

允許客戶端上傳任何文件類型看,所以我只需要重寫採取任何/緩存請求,然後抓住子域並指向正確的目錄。

想出了這個,但我仍然得到一個無效頁

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$ 
RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L] 

任何幫助表示讚賞。

回答

0

在/ var/WWW /是文件在文件系統中的位置。我是根據文檔根目錄進行路由,所以我不需要將其放在那裏。但是我意識到我錯過了/ cache /中的前導斜槓。雖然你的回答並不是我所期待的,但這讓我明白我錯過了什麼。謝謝。

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.site\.com$ 
RewriteRule ^/cache/(.*)$ /sites/%1/cache/$1 [L] 
0

如果我正確讀取the RewriteRule documentation,L標誌本身會生成一個內部重定向,這意味着替換將被解釋爲本地文件系統路徑。

嘗試使用完整的路徑:

RewriteRule ^cache/(.*)$ /var/www/sites/%1/cache/$1 [L]

或做一個外部重定向(使用HTTP返回狀態「302臨時移動」),讓與用戶的瀏覽器重新發送請求新的路徑:

RewriteRule ^cache/(.*)$ /sites/%1/cache/$1 [L,R]