求解 :nginx遇到url中特殊字符时的问题. 我有这样一段配置 location ~* ^/(.*[,]+)/(.*)$ { if ($request_uri ~ ^/(.*[,]+)/(.*)$ ){ set $route_information $1; set_unescape_uri $server_url $2; # echo $server_url; rewrite ^(.*)$ /$server_url? break; } } 正则表达式是用来匹配http://hostname/ep,/originalserver/img/1k.jpg这样的url。 $1对应上面的 ep, (有个逗号),且$1的内容是动态增长的。 $2对应上面的originalserver/img/1k.jpg. nginx处理正常的url上面的配置都没有问题.但是当nginx处理的url 中含有特殊的字符的时候,会对url进行解码.比如url: http://hostname/ep,/originalserver/img/good%2Ftt.jpg. 在配置文件 rewrite 的上面输出 echo $server_url; 我输出的url特殊字符都是正常的没有变化 good%2Ftt.jpg.但是rewrite到后台(servlet request.getRequestURI,getRequestURI java官方的解释是不decode)的url 却变成了good%252Ftt.jpg 难道rewrite也会decode url ? nginx的location 会decode url,这段正则表达式^/(.*[,]+)/(.*) 貌似也会decode url. 感觉nginx对url中特殊字符的处理不是很方便。 不知哪位大神 有求解良药,或者指正我的错误。谢谢。 你好,我也遇到了类似的问题。我也尝试过用nginx来解决这个问题。我先说一下我的思路 1.nginx rewrite 2.将特殊字符的部分转移到 url 的参数中去 3.替换不能使用的特殊字符,采用哪些可以使用的特殊字符 4.我同事推荐给我的 escape(encodeURIComponent(text)) 5.将get请求改为post请求 由于我们考虑到我们现有业务的修改量,我暂时不考虑实现方式的合理性 我采用了第3种方式,将 [ 改为 ( ,将中括号改为中文小括号。 希望对大家有所帮助。也希望大家可以提供更合理的解决方案~ (责任编辑:IT) |