2012-06-11 141 views
1

這些重寫規則似乎不起作用。難道僅僅是不可能的還是我失去了一些東西如何使用.htaccess獲取多個RewriteCond中的反向引用變量

有問題的規則是第二個,注意背參考%1

RewriteCond %{REQUEST_URI} ^/([a-zA-Z\.]+)/.*$ [NC] 
RewriteCond %{HTTP_COOKIE} route_controller_%1=([^;]+) [NC] 
RewriteRule ^(.*)$ http://example2.com/%1/_/$1 [L] 

這是我期待的事情發生。鑑於URL

http://example.com/abc/home 

的第一條規則應該ABC商店%1 我想一個cookie中的第二條規則被稱爲route_controller_abc如果發現 那麼第三個規則將rewite到

http://example2.com/thevalueofthecookie/_/home 

但seconf規則似乎沒有使用%1反向引用。

任何想法?

回答

2

原因是字符串替換隻發生在cond上的第一個參數上,而不發生在rexexp上。你必須做一個黑客利用來模擬正則表達式參數\1

您還可以拿起在規則正則表達式的目錄,因爲執行順序是規則的正則表達式,COND1,COND2,...規則替換。例如。 ^(*.?)/.*$abc/home將設置$1abc和$ 0到abc/home。因此,我會嘗試這樣的:

RewriteCond $1:%{HTTP_COOKIE} ^(.*?):.*\broute_controller_\1=([^;]+) [NC] 
RewriteRule ^(*.?)/.*$  http://example2.com/%2/_/$0   [L] 

注意,控制器現在處於2%的1%用於在COND正則表達式目錄綁定。

希望這可以幫助和回答你的直接Q. Hovever,我會有點抽搐使用未經驗證的cookies這樣的重定向。如果我這樣做,我要麼加強參數([^;]+)的驗證,要麼將其移動到一個小的PHP重定向器腳本,並進行驗證:-)

+0

好的,我會給它一個旋風。關於重定向的未經驗證的Cookie。我打算讓我的應用程序在example2.com上進行驗證。我錯過了什麼嗎? –

+0

不用,使用應用程序來做這件事很好,但請記住,惡意用戶總是可以編輯cookie,因此您不能信任他們的內容。用戶可以將任何東西注入'%2'中。所以,如果你知道這是一個普通的詞,那麼爲什麼不能'(\ w +)'這將有效地防止惡意注入? – TerryE

+0

我不期待一個普通的詞,而是一個完全合格的域名。順便說一下,我無法使規則在寫入系統時運行。在RewriteCond中,我將$ 1更改爲%1。在RewriteRule中,我把'^(*。?)/.*$'改爲'^(。*)$'我用RewriteRule得到了一個內部服務器錯誤。 –

相關問題