2010-08-12 37 views
1

從查詢字符串中刪除IP地址我有一個網址,像這樣:使用.htaccess的

http://example.com/one/?ACT=123&gateway=mygateway&method=mymethod&orderID=303&currency=EUR&amount=11&PM=CreditCard&ACCEPTANCE=test123&STATUS=9&CARDNO=XXXXXXXXXXXX1111&ED=0517&CN=Test+test&TRXDATE=08%2F12%2F10&PAYID=7963938&NCERROR=0&BRAND=VISA&ECI=7&COMPLUS=q5up5h9i6clkkpsntdmupijpl5&IP=169%2E59%2E201%2E137&SHASIGN=1E02A96814AF21FD5415A285FB51A46DFCD6EF4D

我試圖刪除從URL IP = 169%2E59%的查詢字符串以下查詢變量2E201%2E137,同時保持字符串的其餘部分不變。該變量是一個IP地址,可能每次都是不同的IP地址,但始終是一個IP。出於安全原因,如果在查詢字符串中找到IP地址,我使用的其中一個CMS系統將會出錯。不幸的是,我需要從支付網關獲取數據,網關無法關閉正在發送的IP地址。如果我要捕獲發送到我的CMS的數據,那麼我需要使用HTACCESS刪除或替換查詢中的IP。

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^GET\ /.*\ HTTP/ [NC] 
RewriteCond %{QUERY_STRING} IP= [NC] 
RewriteCond %{QUERY_STRING} (.*)(IP=[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3})(.*) [NC] 
RewriteRule .* %{REQUEST_URI}?%1%3 [R=301,L] 

所以,我開始寫這樣的東西,但老實說,我吮吸mod_rewrite和正則表達式。

我不在乎它是否設置爲IP = 123,或者只是刪除,但它不能被格式化爲IP。請讓我知道如果你能幫助!

回答

0

編輯:這實際上是錯誤的,將無法正常工作。我不會改變它,因爲卡格斯的答案已經解決了這個問題,所以請忽略這一點。

您的問題是 %{REQUEST_URI}包含GET值。所以你最後做的只是把除IP之外的所有東西都加到最後,但IP仍然存在。另外,你不需要所有這些條件。你應該可以用一條規則做到這一點,就像這樣:

RewriteEngine on 
RewriteRule ^(.*)(IP=[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3})(.*)$ $1$3 

讓我知道,如果這對你有用。

+0

我不知道爲什麼這有兩個票,downvoted因爲REQUEST_URI不包括QUERY_STRING。概念驗證... RewriteRule ^(。*)$ http://www.google.co.uk/search?q=%{REQUEST_URI} [R = 302] – 2010-08-12 07:05:21

+0

我也downvoted,因爲測試模式輸入到'RewriteRule'將不會包含查詢字符串部分,所以這會使OP遠離正確的答案。此外,'%{REQUEST_URI}'不包含'%{QUERY_STRING}',如果不存在'%{REQUEST_URI'',mod_rewrite'將自動附加查詢字符串到請求中,在替換中被指定。 – 2010-08-12 07:57:19

+0

好吧,我認爲'REQUEST_URI'包含了查詢字符串,因爲自動追加的東西,因爲PHP中的$ _SERVER ['REQUEST_URI']'包含查詢字符串。 @Tim感謝你解釋。我刪除了我之前的評論,並提出了Cags的回答。 – qmega 2010-08-12 08:04:49

2

我不知道關於你的前兩個RewriteConds但這樣的事情應該工作...

RewriteCond %{QUERY_STRING} (.*)IP=\d{1,3}%2E\d{1,3}%2E\d{1,3}%2E\d{1,3}&(.*) [NC] 
RewriteRule ^(.*)$ /$1?%1%2 [R=302,L] 

這並不認爲總是會有的IP地址後的參數,如果ISN」在這種情況下,您可以刪除&,但您最終會得到雙重&符號。如果總是有一個值,那麼你總是可以將它移動到IP之前。無論哪種方式,我假設你使用的任何服務都是相當標準的。

注:我總是使用302進行測試,因爲一旦瀏覽器緩存一個前向文件,可能很難測試更改。一旦它的工作改變它回到301.