2013-02-20 27 views
0

我正在使用以下內容來傳遞服務器上潛在文件位置的詳細信息,但第3行會導致它失敗。通過刪除這一行,在test.php的文件看到由%建立了正確的文件位置1 /%2使用htaccess使用條件字符串檢查文件

RewriteCond %{HTTP_HOST} ^([a-z0-9\-\_]+)\.domain\.com? 
RewriteCond %{THE_REQUEST} (images/.*) 
RewriteCond %{HTTP_HOST}%1 ^([a-z0-9\-\_]+)\.domain\.com(images/.*) 
RewriteCond %1/%2 -f 
RewriteRule ^.* test.php?file=%1/%2 [L] 

一旦它的工作,我會提供服務的文件,如果它在新的位置是否存在,如果不下一個重寫函數將構建該圖像並將其放置在下一次的位置。

任何幫助表示讚賞。

回答

0

好吧,我已經解決了這個問題,並且爲了節省一些頭痛的日子,這裏就是解決方案。

RewriteCond %{HTTP_HOST}%{THE_REQUEST} ^([a-z0-9\-\_]+)\.domain\.com.*?(/images[^\s]+) 
RewriteCond %{DOCUMENT_ROOT}/%1%2 -f 
RewriteRule ^.* %1%2 [L] 

文件檢查需要文檔根目錄,我花了好幾天的時間來解決這個問題。 最終的結果是,存在的文件將直接送達,如果上面的文件可以接受請求並將該文件放在正確的位置後不再進行重寫。 感謝您的幫助David Ravetti,您現在可以希望瞭解我之後的工作。

+0

很高興你找到了一個可行的解決方案。如果將來您需要額外的工作,您可能需要嘗試'RewriteBase'來查看它是否有助於簡化規則。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritebase – 2013-02-23 00:20:33

0

你的問題缺乏一些必要的細節,但這裏是猜測發生了什麼。

如果該請求是用於http://abc123.domain.com/whatever/images/somefile.jpg,則:

的RewriteCond 1場比賽和%1 = 「ABC123」。

RewriteCond 2然後匹配%2 =「images/somefile.jpg」。

當你試圖將「abc123.domain.comabc123」匹配到「(某事).domain.comimages /.*」時,RewriteCond 3毫無意義。

RewriteCond 4會嘗試確保「abc123/images/somefile.jpg」作爲真實文件存在。

所以,我猜你的目錄結構是「/ domainprefix/images」,所以上面的URL你試圖確保圖像存在於「/abc123/images/somefile.jpg」。如果是這種情況,那麼的RewriteCond 3和4,應修改爲:

RewriteCond %{REQUEST_URI} /%1/%2 
RewriteCond %{REQUEST_URI} -f 

我再次具有你的目標是什麼猜測,但是這應該是至少接近你所需要的。

+0

你就是目標。 現有條件3與HOST +%1匹配,相當於http://abc123.domain.comimages/somefile.jpg,只不過是獲取條件4中的文件檢查所需的兩個部件的一種方式。第一個條件只是爲了在htaccess文件中過濾掉其他條件。 我會嘗試你的建議,並讓你知道它的結果。 – 2013-02-21 13:44:48

+0

唉,不要運氣!但是你讓我重新思考需要的檢查,這是一個縮短版本,但文件檢查仍然沒有通過! 'RewriteCond%{HTTP_HOST}%{THE_REQUEST} ^([a-z0-9 \ - \ _] +)\。domain \ .com(images /.*)? RewriteCond%1 /%2 -f RewriteRule ^。* test.php?file =%1 /%2 [L]' – 2013-02-21 13:56:23

+0

我更接近這個,但文件檢查失敗! 'RewriteRule%{THE_REQUEST} ^([a-z0-9 \ - \ _] +)\。domain \ .com。*?(/ images [^ \ s] +) 'RewriteRule ^。* test.php?文件=%1%2 [L]' 使用REQUEST_URI和THE_REQUEST的原始文件不完全匹配圖像名稱。此版本顯示正確的文件名,現在我需要添加文件檢查... 1行,它不再有效! '帶有或不帶斜槓的'RewriteCond%1 /%2 -f'! – 2013-02-21 14:11:35