我正在使用的这个网站使用一种奇怪的方法来传递多个参数,查询字符串类似于:?terms=43<|>300,201<|>100
服务器端,它explode('<|>',$_GET['terms'])
分割参数(我知道,它太丑了)。
这是我可以更改的内容,但<|>
分隔符必须正常工作,因为链接已经在其他网站上传播。它实际上适用于除IE以外的大多数浏览器,IE将URL作为UTF-8发送,并且不像其他浏览器那样转义<
和>
(%3C和%3E)。
在IE上,当我输入其中一个网址时,我只看到403错误,因为<|>
混淆了来自htaccess的重写规则以及通常的重写规则将index.php文件添加到网址永远不会被执行。
所以,我需要一个RewriteRule来将<|>
更改为|
(只有|,IE可以工作)。
我试过这个,但没有成功:
RewriteRule ^(.*)<\|>(.*)<\|>(.*)$ $1|$2|$3 [NE]
(我保留了网址的三个部分并将<|>
替换为|
)
任何帮助?
答案 0 :(得分:1)
您无法匹配规则本身的查询字符串,您需要使用%{QUERY_STRING}
变量:
RewriteCond %{QUERY_STRING} ^(.*)<\|>(.*)<\|>(.*)$
RewriteRule ^(.*)$ /$1?%1|%2|%3 [L,R]