技术解析

nginx为什么不匹配这样的url?
0
2021-05-31 09:33:26
idczone
我要重写这样的路径:
http://www.abc.com/abc/http%3A%2F%2Fwww.bbb.com%2Ffiles%2F201108%2Fpet_stool.jpg/http%3A%2F%2Fwww.bbb.com%2Ffiles%2F201108%2Fpet_stool


http://www.abc.com/def/ggg.php?imgUrl=http%3A%2F%2Fwww.bbb.com%2Ffiles%2F201108%2Fpet_stool.jpg&pageUrl=http%3A%2F%2Fwww.bbb.com%2Ffiles%2F201108%2Fpet_stool

我的重写规则为:
rewrite ^美国服务器/abc/([^/]+)/(.*)$ /def/ggg.php?imgUrl=$1&pageUrl=$2 last;
不知道什么原因一直匹配不上。

但是我使用http://www.abc.com/abc/dd/ee这样的路径是可以匹配上的,据我自己分析是nginx的问题,是不是nginx匹配了http之类的单词?

那请问下我要如何才能匹配带有类似url作为参数的路径那?我的那些url都已经encodeuri过了。
1、首先URL没必要转码,另一方面楼主将 :// 转成 %3A%2F%2F 浏览器是无法识别的,正确的应该是:%253A%252F%252F
2、因为([^/]+)的值包含了://,所以$1的值并不等于([^/]+)
我的rewrite规则是:
rewrite ^/abc/http:/*/(.+)/http:/*/(.+)$ /def/ggg.php?imgUrl=http://$1&pageUrl=http://$2 last;

更正一下,%3A%2F%2F 没错,是我搞错了。。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服