最近在看Flask,其中提到了对于URL尾斜杠的处理。感觉算是一个需要注意的地方吧,就和Django的处理方式来进行一个简单的对比。

首先说下什么是尾斜杠。

http://www.baidu.com/    # 有尾斜杠

http://www.baidu.com     # 无尾斜杠

清楚了吧。

那么为什么我们要关注尾斜杠这个问题呢?这个要从Django和Flask对于URL的设置说起。

Django和Flask设置URL方式:

r'^admin/$'   # Django

'admin/'   # flask

可见两者都是基于字符串的匹配。所以问题就出来了:

如果我设置了一个形如'admin'的URL,那么当用户输入'admin/'的时候应不应该匹配呢?

或者换种说法:

如果我设置了一个形如'admin/的'URL,那么当用户输入'admin'的时候应不应该匹配呢?

这就是尾斜杠问题。

下面我们看看Django和Flask是如何处理的。

Django中的处理方法是提供了一个设置项,APPEND_SLASH,这个设置的默认值是True。当APPEND_SLASH为True的时候,如果一个URL没有匹配成功,那么Django会在这个URL尾部加上一个'/'并重新redirect回来。如果设置为False,那没有匹配成功的时候就什么都不会做。

需要注意的是,由于采用了redirect的方式,所以POST数据可能会丢失。

Flask默认行为和Django一样,只不过文档中并没有说明是不是采用redirect方法,如果不是的话,那么数据就没有丢失的风险了。

所以现在我们可以来回答上面的两个问题了:

如果设置了'admin',那么只有'admin'会匹配,'admin/'不会匹配。

如果设置了'admin/',那么'admin'和'admin/'都会匹配。

Django和Flask对于URL尾斜杠(back slash)的处理的更多相关文章

  1. ASP.NET MVC中URL末尾斜杠的实现

    在网站的SEO优化中,通常都会涉及到URL结尾斜杠的问题. http://blog.sina.com.cn/s/blog_828e7ce40100srj1.html http://www.dengyo ...

  2. nginx 重写URL尾部斜杠

    1. 在URL结尾添加斜杠 在虚拟主机中这么添加一条改写规则: rewrite ^(.*[^/])$ $1/ permanent;或者rewrite ^([/\w-_]*[^/])$ $1/ perm ...

  3. URL中斜杠/和反斜杠\的区别小结

    Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不 ...

  4. json_encode让URL内容斜杠/不转义

    同事在开发接口的时候根据接口提示要求传参一个字符串json,该json格式中有URL数组,按照json_encode编码后总发现 http://变成了 http:\/\/  .URL的斜杠自动的被转义 ...

  5. django(二)视图和URL配置

    创建一份视图: 在上一节,使用django-admin.py startproject制作的mysite文件夹中,创建一个叫做views.py的空文件.这个Python模块健柏寒这一章的视图. vie ...

  6. url末尾的斜杠作用探秘

    今天突然好奇,想区分www.abc.com/efg 和www.abc.com/efg/这两个网址的区别.即分析一下url末尾加个斜杠是否有特殊的效果. 找到网上的介绍: 当Web服务器接收到对某个末尾 ...

  7. URL后面带\斜杠对SEO的影响

    例如以下的两种URL书写方式: 1.www.baidu.com 2.www.baidu.com\ 这两种书写方式的区别到底在哪里呢?哪一个的速度更快呢?可能对于我们大多数人来说会觉得两个速度一样,因为 ...

  8. nginx url自动加斜杠的问题

    nginx url自动加斜杠问题及301重定向 时间:2016-02-04 15:14:28来源:网络 导读:nginx url自动加斜杠问题及301重定向,URL指向一个目录并且在最后没有包含斜杠, ...

  9. URL结尾反斜杠对SEO的影响(转)

    开始纠结网站URL加不加反斜杠对SEO的影响,还有些人把这个反斜杠说的神乎其神,我擦,本人手贱百度了一下,果然“博大精深”,敬请参考! 从百度站长平台的外链分析里,我们可以看到,一些目录结构的URL, ...

随机推荐

  1. hibernate注解随笔—10月8日

    hibernate注解(herbinate4 jar包注解可用,使用hibernate3.3注解失败) 如果javabean与数据库中表名一致(不区分大小写),则注解不用写@Table(name=&q ...

  2. SPSS数据分析-时间序列模型

    我们在分析数据时,经常会碰到一种数据,它是由时间累积起来的,并按照时间顺序排列的一系列观测值,我们称为时间序列,它有点类似于重复测量数据,但是区别在于重复测量数据的时间点不会很多,而时间序列的时间点非 ...

  3. MyBatis总结(一)

    一.创建测试项目工程 二.导包(一个myBatis所需的包,以及一个数据库操作的包) 三.创建实体类 四.配置文件的建立(最佳命名为(SqlMapConfig.xml)) <?xml versi ...

  4. php基础_变量和比较符

    本人php菜鸟一枚,初读<php和mysql web开发>,把其中的比较基础的一些东西列举出来,方便和自己一样的菜鸟快速入门,并且方便自己以后复习理解. ①变量 1.比较有特色的应该是变量 ...

  5. 完美解决google无法访问

    1.进入短信界面 2.菜单-设置 3.修改短信中心号码(Set the SIM's smsc number) 保存 [测试结果]:提示保存成功,但是号码没有改变,退出重新进入设置才会看到号码更新 [预 ...

  6. checkbox

    $(document).ready(function(){ var page_id = {/$page_id/}; var location_id = {/$location_id/}; var lo ...

  7. 也说析构---C++

    正如我们知道的: 通过new分配到heap中的对象,当对其delete,才会被析构: 分配在stack中的对象,当其离开作用域时被析构:

  8. 项目中常用的linux命令

    1. du -sm * | sort -n 把当前目录下的文件(或目录)按大小排序,看下哪个地方占用最多: 2. pwd                     获取当前目录路径 3. tail -f ...

  9. css 变量与javascript结合

    <div onClick="test('yellow')"> CSS Variable</div> ================CSS :root{ - ...

  10. C# Request中修改header信息

    var headers = app.Context.Request.Headers; Type hdr = headers.GetType(); PropertyInfo ro = hdr.GetPr ...