2014-10-16 38 views
1

這個網站我正在使用一個奇怪的方法來傳遞多個參數,查詢字符串看起來是這樣的:?terms=43<|>300,201<|>100重寫規則與「<" and ">」

服務器端,它explode('<|>',$_GET['terms'])分裂參數(我知道,這太醜陋了)。

這是我可以改變的東西,但<|>分隔符必須工作,因爲鏈接已經在其他網站上傳播。它實際上在除IE以外的大多數瀏覽器上工作,IE發送URL爲UTF-8,並且不會像其他瀏覽器那樣轉義<>(%3C和%3E)。

在IE上,當我輸入其中一個網址時,我只看到一個403錯誤,因爲<|>與htaccess的重寫規則混淆在一起,而通常的重寫規則將index.php文件添加到url永遠不會執行。

所以,我需要一個RewriteRule將這些<|>更改爲|(只有|,IE作品)。

我想這一點,但沒有成功:

RewriteRule ^(.*)<\|>(.*)<\|>(.*)$ $1|$2|$3 [NE] 

(我保持URL的三個部分,並更換<|>|

任何幫助嗎?

+0

,請問收到你的Apache顯示的URL? – anubhava 2014-10-16 20:31:39

+0

在日誌中,當請求來自IE時,它顯示「terms = 123 <|> 23,233 <|> 333」,當它來自另一個瀏覽器時,它顯示「terms = 123%3C |%3E23,233%3C |%3E333」( IE發送這些字符時,所有瀏覽器轉義< and >) – arieljuod 2014-10-17 03:11:20

回答

1

你不能在規則本身的查詢字符串匹配,您需要使用%{QUERY_STRING}變量:當你從IE瀏覽器的請求

RewriteCond %{QUERY_STRING} ^(.*)<\|>(.*)<\|>(.*)$ 
RewriteRule ^(.*)$ /$1?%1|%2|%3 [L,R]