我的flask应用程序正在为其中一个urls执行301重定向。
New Relic中的回溯是:
Traceback (most recent call last):
File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1336, in dispatch_request
self.raise_routing_exception(req)
File "/var/www/app/env/local/lib/python2.7/site-packages/flask/app.py", line 1319, in raise_routing_exception
raise request.routing_exception
RequestRedirect: 301: Moved Permanently它看起来甚至没有命中我的代码,或者更确切地说,回溯没有显示其中的任何文件。在某一点上,我确实让Nginx将所有非SSL请求重定向到HTTPS,但必须禁用它,因为Varnish无法在没有错误的情况下向端口443发出请求。可能是我做过或没做过的一些配置。
不过,它并不总是返回一个301,我可以毫不费力地请求并获取它。但是世界上有人在请求网址时,会得到一个301响应。
这是一个带有一些自定义头部的GET请求,用于将其链接到帐户。
在我的代码中没有301重定向。
发布于 2014-01-11 01:25:54
回溯显示,引发重定向的是匹配的路由;通常(例如,除非您添加了显式重定向路由),这意味着客户端试图访问分支URL (以斜杠结尾),但请求的URL不包括最后一个斜杠。客户端重定向到带有斜杠的规范分支URL。
从Werkzeug Rule documentation
以斜杠结尾的
URL规则是分支URL,其他是树叶URL。如果您启用了
strict_slashes(这是默认设置),则所有匹配但没有尾随斜杠的分支URL将触发重定向到附加了缺少斜杠的同一个URL。
从routing documentation
Flask的网址规则基于Werkzeug的路由模块。该模块背后的思想是基于Apache和更早的HTTP服务器制定的先例来确保漂亮和唯一的URL。
遵循以下两条规则:
@app.route('/projects/') def projects():return 'The project page‘@app.route('/ about ') def about():return 'The about page’
尽管它们看起来非常相似,但它们在URL定义中对尾部斜杠的使用有所不同。在第一种情况下,项目终结点的规范URL有一个尾随斜杠。从这个意义上说,它类似于文件系统上的文件夹。不使用尾随斜杠访问它将导致Flask重定向到带有尾随斜杠的规范URL。
然而,在第二种情况下,URL的定义没有尾随斜杠,这与类UNIX系统上的文件路径名非常相似。访问带有尾随斜杠的URL将产生404“Not Found”错误。
此行为允许相对URL继续工作,即使省略了尾部斜杠,这与Apache和其他服务器的工作方式一致。此外,URL将保持唯一,这有助于搜索引擎避免对同一页面进行两次索引。
正如文档所述,如果您不想要此行为(并将不带尾随斜杠的url设置为404not Found ),则必须在路由上设置strict_slashes=False选项。
https://stackoverflow.com/questions/21050320
复制相似问题