nginx为什么不匹配这样的url?

2011-08-13 19:47:31 +08:00
 26z
我要重写这样的路径:
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过了。
6198 次点击
所在节点    NGINX
2 条回复
WangYan
2011-08-14 00:50:20 +08:00
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;
WangYan
2011-08-14 01:05:46 +08:00
更正一下,%3A%2F%2F 没错,是我搞错了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/16815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX