Mod跨子域重寫所有失去的圖像
我正在設置一個開發伺服器,因此我不再需要直接編輯遠端伺服器上的文件並使用 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
在每個帶有兩個子域的請求上都會觸發你的請求,因為它不應該這樣。您可以打開重寫日誌,並查看它與什麼匹配。希望這可以幫助。