2012-03-15 78 views
1

我在我的htaccees以此來改變取決於cookie值的IMG路徑:htaccess的不工作 - 與cookie值更新圖像路徑

<IfModule mod_rewrite.c> 
    # check for client cookie 
    RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*) 
    # check if an image was requested 
    RewriteCond %{REQUEST_FILENAME} \.(jpe?g|gif|bmp|png)$ 
    # exclude these folders 
    RewriteCond %{REQUEST_URI} !some/members/logos 

    # grab everything before the variable folder and everything afterwards 
    # replace this with first bracket/cookie_value/second bracket 
    RewriteRule (^.+)/VARIABLE/(.+)$ $1/%1/$2 [L] 
</IfModule> 

圖片鏈接是像這樣:

<img src="http://www.some.com/images/VARIABLE/img/1.jpg" alt="" /> 

我很高興我做到了這一點,但問題是......它不工作。我不知道爲什麼?任何人都可以點亮一下嗎?

謝謝!

HALFWAY:
我得到這個工作:

RewriteRule ^(.+)/VARIABLE/(.+)$ $1/SET_VALUE/$2 [L] 

其中具有SET_VALUE替換我的變量。然而,只要我添加一個條件,整個事情就會失敗,任何圖像都不會顯示出來。例如,這應該給我的cookie的值,這是我想要進入,而不是SET_VALUE:

RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*) [NC] 
+0

如果您完全控制了Apache,請啓用調試模式:「RewriteLogLevel 9」(或http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging獲取最新版本)並檢查日誌 - 它應該詳細告訴你它失敗的位置(越高的調試級別越詳細/詳細的日誌將會是)。 – LazyOne 2012-03-15 16:07:05

+0

無法訪問... :-(任何其他的想法,哪裏可以得到關於發生什麼事情的一些信息?我只是猜測 - 上傳 - 檢查現在,我不希望看到自己在做更長的時間... – frequent 2012-03-15 16:10:35

+1

也許你可以在當地的Apache上使用它,否則它可能會在循環中再次嘗試並嘗試使用。無論如何:'^(。+)/ VARIABLE /(。+ \。(jpe?g | gif | bmp | png))RewriteRule的$'模式將擺脫第二種情況。'RewriteCond%{REQUEST_URI}!/ some/members/logos'應該可以正常工作(除非你在這裏有錯誤的路徑!!)。 – LazyOne 2012-03-15 16:31:12

回答

0

解決方案:(後多管閒事,並從@LazyOne很大的幫助!):

<IfModule mod_rewrite.c> 
    # exclude these folders 
    RewriteCond %{REQUEST_URI} !/some/members/logos 
    # check for client cookie   
    RewriteCond %{HTTP_COOKIE} client=([^;]*) [NC]  
    # replace variable with cookie value 
    RewriteRule ^(.+)/variabel/(.+\.(jpe?g|gif|bmp|png))$ $1/%1/$2 [L] 
</IfModule> 

最棘手的部分,歷時永遠解決的是,以確保您的cookie具有後半冒號...我有我的餅乾像這樣設置:

document.cookie = "client=value" 

哪沒有工作。將其更改爲:

document.cookie = "client=value;" 

使其工作。也許對eles有幫助。

0

我假設的問題是,你風與像/images/jpg/1.jpg/images//1.jpg的路徑?

您正在使用%1作爲您的cookie值的反向引用,但反向引用應引用「最後匹配的RewriteCond」,並且您希望匹配的引用之後還有其他引用(包括一個帶有分組的引用)。嘗試將cookie移到最後。

另外,您在該cookie中有兩個分組,但您使用的是%1,這將最終引用(?:^|;\s*)而不是([^;]*),這會給您錯誤的結果。

如果這不是你的問題,你可以詳細說明URL是如何發佈的嗎?它沒有被重寫,還是被錯誤地重寫了?

+0

Thx的信息。它沒有被寫入。 – frequent 2012-03-15 14:32:15

+0

我想如果我在我的變量之前和之後分組,我可以再做(group before)/ cookie /(group after)並取回原始URL部分 – frequent 2012-03-15 14:33:06

+0

如果它沒有被重寫,那麼肯定還有其他問題。我一眼就看不到它,所以我建議刪除'RewriteCond's,直到找出哪一個(或規則本身)導致問題。也許暫時使用一個字符串,而不是'%1',直到完全重寫爲止。 – Rick 2012-03-15 14:37:36