2012-11-18 356 views
1

我將所有圖像集中到服務器上的一個文件夾中。我有幾個網站使用單個集中式引擎爲每個域獲取各自的內容。對於圖像的目錄結構:.htaccess爲多個域重寫

images/ 
    website1.com/ 
    image1.jpg 
    image2.jpg 
    ... 
    website2.com/ 
    image1.jpg 
    image2.jpg 
    ... 
    website3.com/ 
    image1.jpg 
    image2.jpg 
    ... 

然而,當我要求從HTML這些圖像資源之一,我不希望使用的網址:

http://website1.com/images/website1.com/image1.jpg 

相反,我只是想:

http://website1.com/images/image1.jpg 

有兩種情況,我需要這個翻譯然而。 Live服務器和開發服務器。現場案例看起來很簡單,將%{HTTP_HOST}重寫到路徑中。開發服務器的情況有點不同。我使用名爲dev_domain的cookie來查看測試網站。即:$ _COOKIE ['dev_domain'] = website1.com。

制定實例和開發服務器案例的規則是什麼?

這是我迄今爲止的發展情況,但它不工作:

RewriteBase/
RewriteCond %{HTTP_COOKIE} dev_domain=([^;]+) [NC] 
RewriteCond %{THE_REQUEST} ^/images/(.*)$ 
RewriteRule ^/images/(.*)$ images/%1/$1 [NC,L] 

這就是我對生活的情況下,目前還不能確定是否可行與否,因爲我沒有推它住(條件是排除開發服務器):

RewriteCond %{HTTP_HOST} !^dev.mainsite.com$ 
RewriteRule ^/images/(.*)$ /images/%{HTTP_HOST}/$1 [NC,L] 

任何想法我做錯了什麼?

回答

0

你看起來快要到了。該RewriteRule指令不應該有領先/

# Added [NC] to the host RewriteCond, removed [NC] from the RewriteRule 
RewriteCond %{HTTP_HOST} !^dev.mainsite.com$ [NC] 
RewriteRule ^images/(.*)$ /images/%{HTTP_HOST}/$1 [L] 
#----------^^^---no leading/

應用相同的變化模式來開發網站規則。

+0

感謝您的意見,我會盡力。你能幫我用cookie格式嗎?我對結構不太確定。也許我需要做的只是刪除前導斜線,但我不知道是否有其他錯誤。謝謝! –

+0

我試圖與僅此其不工作: 'RewriteBase/ 的RewriteCond%{HTTP_COOKIE} dev_domain =([^] +)[NC] 的RewriteCond%{THE_REQUEST} ^圖像/(.*)$ 重寫規則^ images /(.*)$ images /%1/$ 1 [NC,L]' 我刪除了「%{THE_REQUEST}」行,並且得到了500錯誤。我仍然試圖找出爲什麼cookie不被識別。我知道cookie存在。謝謝。 –

+0

查看你的錯誤日誌,看看500的原因。我懷疑有一個重寫循環,在這種情況下,你需要'RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d'來防止重寫實際存在的文件。 –