2012-03-30 61 views
3

我們通過相同的代碼運行多個域,我們希望將他們的圖像保存在各自的文件夾中。這是我們正在做的。htaccess不知道用戶的重定向

/images/www.domain1.com/logo.jpg /images/www.domain2.com/logo.jpg

現在,我想知道的是,這是可能的,我們重寫htaccess的沒有用戶懷疑任何東西的網址。這就是我想要的那

<img src="/images/logo.jpg" /> 

應通過htaccess的

RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301] 

內部變成但我的問題是,

  1. 以上重定向不斷循環
  2. 我能做到的IMG效果沒有用戶或管理員懷疑任何東西?

真誠,

Khuram

回答

1

如果您不想在瀏覽器中更改網址,您絕對不應該使用R標誌。但即使沒有R標誌,您的RewriteRule將無限循環,您最終將獲得internal server error。使用重寫規則是這樣的:

RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteRule ^images/(.*)$ images/%{HTTP_HOST}/$1 [L,NC] 
這是使用調用一次重寫規則規則被成功地應用於被設置爲200 {ENV:REDIRECT_STATUS}一個特殊的內部變量

+0

先生,做得非常好。這工作完美。謝謝你教我一個新的竅門。 – Khuram 2012-03-31 05:45:30

+1

非常歡迎。我很高興爲你解決問題。 – anubhava 2012-03-31 07:28:16

6

取出R=301簡單地做一個重寫,而不是重定向:

RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L] 

它是不斷循環的原因是,301重定向引起新請求爲url images/www.domain1.com/logo.jpg創建。該網址也符合您的^images/(.*)$規則,因此它會再次被重定向,無限無盡。

如果你真的想做一個301重定向(我懷疑你沒有,但如果你這樣做),你可以通過添加一些重寫條件來跳過重定向來解決無限循環問題,如果域已經包含:

RewriteCond {REQUEST_URI} !^images/www.domain1.com/(.*)$ 
RewriteCond {REQUEST_URI} !^images/www.domain2.com/(.*)$ 
RewriteRule ^images/(.*)$ /images/{HTTP_HOST}/$1 [L,R=301] 
+0

嗨,埃裏克,感謝您的解釋,我知道我在附近,但現在我知道我爲什麼要做每一個這些步驟。我會嘗試,然後將其標記爲完成。 – Khuram 2012-03-30 19:22:10

+0

嗨@Eric Anubhava的回答如下。這一次又是循環。再次感謝。 – Khuram 2012-03-31 05:45:08