当路径还包含URL时,使用Flask捕获所有URL

时间:2014-04-19 01:17:56

标签: python google-app-engine url flask

好的,所以我想通过这段代码

来捕获Flask应用中的所有网址
@app.route('/<path:path>')
def catch_all(path):
    return path

只是一个基本的应用程序,显示每个页面的相对路径。因此,这适用于大多数路径(localhost/whatever/I/want,例如print whatever/I/want)。

除一例外。例如,如果我在网址栏中输入localhost/foo/http://google.com/bar,我希望显示的内容是foo/http://google.com/bar,但实际得到的只是bar。因此,实际上Flask会找到最后一个有效的URL并获取此URL后面的路径。

无论如何都要抓住我们网址的真实路径?

修改:我使用Google App Engine for Python运行Flask 0.10。

1 个答案:

答案 0 :(得分:2)

我能够使用当前的Google App Engine SDK重现您的问题;这是由捆绑的CherryPy服务器解析请求的方式引起的。

此问题仅将 应用于本地开发服务器,当您将应用部署到Google时,其他处理程序会解析URI并且http://方案未解析。

请参阅CherryPy issue #1284以及相应的appengine devserver ticket

解决方法是对冒号进行URI编码:

http://localhost:8000/foo/http%3A//google.com/bar

作品。