烧瓶301响应

 Morpheus尘世美t 发布于 2023-02-04 16:09

我的烧瓶应用正在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,我可以请求URL并毫不费力地获取它.但是世界上有人要求提供网址的人正在收到301回复.

这是一个GET带有一些自定义标题的请求,可以将其链接到该帐户.

在我的代码中没有任何一点是301重定向.

1 个回答
  • 回溯显示路由匹配引发了重定向; 通常(例如,除非您添加了显式重定向路由),这意味着客户端尝试访问分支 URL(以尾部斜杠结尾的URL),但请求的URL不包括最后一个斜杠.只需使用斜杠将客户端重定向到规范分支URL .

    从Werkzeug Rule文档:

    以斜杠结尾的URL规则是分支URL,其他是叶子.如果已strict_slashes启用(这是默认设置),则在没有尾部斜杠的情况下匹配的所有分支URL将触发重定向到相同的URL,并附加缺少的斜杠.

    从路由文档:

    Flask的URL规则基于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"未找到"错误.

    此行为允许相对URL继续工作,即使省略了尾部斜杠,这与Apache和其他服务器的工作方式一致.此外,URL将保持唯一,这有助于搜索引擎避免两次索引相同的页面.

    如文档所述,如果您希望出现此行为(并且使用尾部斜杠的网址为404 Not Found),则必须strict_slashes=False在路由上设置该选项.

    2023-02-04 16:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有