Dot-Htaccess

Mod跨子域重寫所有失去的圖像

  • April 12, 2011

我正在設置一個開發伺服器,因此我不再需要直接編輯遠端伺服器上的文件並使用 SVN 進行版本管理。

由於某些站點的圖像非常重(3-30gb),我們決定不將圖像包含在 SVN 儲存庫中。

所以我建立了一個系統,它給所有子域自己的虛擬文件根,所以http://[user].[domain].testdomain.com得到一個虛擬文件根,/working/[user]/[domain]/httpdocs這些是所有使用者的工作副本。

(我不知道它是否相關,但可能有用)

但是,出於全面測試的目的,顯示圖像會很有用。開發伺服器還兼作備份伺服器,因此所有圖像都在伺服器上。我想通過漂亮的 htaccess/php 腳本組合顯示所有失去的圖像。

我目前正在使用這些規則:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule (.*) http://testdomain.com/fallback.php?image=$1 [L]

但這並不完全按計劃工作,因為我無法從中獲取子域資訊。此外,由於重定向 url 包含一個完整的域,它會被完全重定向,這使其成為一個額外的 http 請求。

理想的設置是所有失去的圖像都由一個 PHP 腳本提供,位於http://testdomain.com/fallback.php並且圖像是從它們的原始 url(如http://me.webshop.testdomain.com/images/header.png)提供的,但我似乎無法讓它工作。

這甚至可能嗎?如果是這樣,任何指向我應該做什麼的指針?

ps 作為獎勵,上面提供的規則似乎會在雙子域 ( user.webshop.testdomain.com) 上的每個圖像請求上觸發,但它的工作原理就像它應該在 上一樣webshop.testdomain.com,這是為什麼呢?

//編輯:

這解決了我的問題:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.domain\.nl [NC]
RewriteCond /working/%1/%2/httpdocs%{REQUEST_URI} !-F
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule (.*) http://domain.nl/fallbackimages/fallback.php?image=$1&host=%{HTTP_REFERER}&oeps=%{HTTP_HOST} [P]

如果您想訪問子域(我假設在 PHP 文件中使用),您可以嘗試以下操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteCond %{HTTP_HOST} ([^\.]*)\.([^\.]*)\.testdomain\.com$
RewriteRule (.*) http://testdomain.com/fallback.php?image=$1&user=%1&subdomain=%2 [P]

我將[L]標誌更改為 a [P],它將代理請求,而不是重定向它。這確實需要mod_proxy啟用。%1%2允許訪問之前的正則表達式組RewriteCond

另外,我不確定為什麼RewriteRule在每個帶有兩個子域的請求上都會觸發你的請求,因為它不應該這樣。您可以打開重寫日誌,並查看它與什麼匹配。

希望這可以幫助。

引用自:https://serverfault.com/questions/258182