刚接触 Flask, 在部署到 nginx 后 route 变量规则这里碰到了奇怪的问题...
from flask import Flask
app = Flask(__name__)
@app.route('/geturl/<path:url>')
def geturl(url):
return url
if __name__=='__main__':
app.run()
直接用 python 执行 python geturl.py
访问 http://127.0.0.1:5000/geturl/http://google.com
, 返回:
http://google.com
然后用 uwsgi 部署到 nginx 后访问该地址返回:
http:/google.com
发现少了一个斜杠, 于是后面的地址用 urlencode 尝试
http://127.0.0.1:5000/geturl/http%3A%2F%2Fgoogle.com
仍然返回
http:/google.com
为什么莫名其妙的少了一个斜杠... 之后尝试, 无论多少个斜杠连在一起都只返回一个?!
如果是 nginx 的锅, 那该怎么让它支持多个连续斜杠...
感谢 @Zzzzzzzzz, 和下面小伙伴的回答. 已解决, 果然是 nginx 的锅.
添加 merge_slashes off;
后就好了..
虽然这样可以用了, 但是还是打算用 localhost/geturl?url=http://google.com 配合 request.args.get 好了.
这样在不设置 merge_slashes off;
的情况下也可以正常工作
1
Kilerd 2016-05-17 21:14:09 +08:00
确定 是 nginx 的 锅?
试试 urldecode 先? |
2
Zzzzzzzzz 2016-05-17 21:18:45 +08:00 1
nginx 里设置 merge_slashes off;
|
3
lxy 2016-05-17 21:18:51 +08:00
Try escaping "%" as "%25"
|
4
MayKiller OP |