首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶301响应

烧瓶301响应
EN

Stack Overflow用户
提问于 2014-01-11 01:12:06
回答 1查看 15.5K关注 0票数 25

我的flask应用程序正在为其中一个urls执行301重定向。

New Relic中的回溯是:

代码语言:javascript
复制
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重定向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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选项。

票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21050320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档