今天又被微软不按标准的做法折腾了一下,写篇博文抱怨一下。

我们先来看一下IETF(Internet Engineering Task Force)对URI结构的标准定义(链接):

注意上面的path部分(/over/there)是包含开头的斜杠的。

而微软的眼中偏偏少了开头的这个斜杠——over/there。

当你用微软的IIS Url Rewrite module写匹配规则时,必须要把开头的这个斜杠排除在外。

当你在ASP.NET MVC中用routes.MapRoute写路由规则时,必须要把开头的这个斜杠排除在外。

当你面对这样的URI(http://www.cnblogs.com/)时,匹配规则要写为^$。

如果抛开标准不谈,仅仅从使用直觉上,“/over/there”也比“over/there”更合理,因为通过开头的“/”可以直觉地知道是从根路径开始的,“over/there”给人的直觉就是一个相对路径。

如果你是一位长期使用微软平台的程序员,由于习惯原因可能体会不深;但如果你是从非微软平台转过来的程序员,会很不习惯。

而我今天被折腾,不是因为从非微软平台到微软平台,而只是从Helicon Tech的ISAPI_Rewrite到Microsoft的IIS Url Rewrite module。

今天在将一个站点从IIS 7.5(Windows Server 2008 R2)迁移至IIS 8.0(Windows Server 2012)后(顺带吐槽一下IIS 8.0竟然与IIS 7.5的配置文件不兼容),发现ISAPI_Rewrite在某些重写规则下会引发IIS应用程序池崩溃(503错误),只能改用IIS Url Rewrite module。

IIS Url Rewrite module支持从ISAPI_Rewrite的httpd.ini配置文件中导入Url重写规则,但就是因为微软眼中的URI Path与众不同,不得不对每条规则进行修改。之前,博客站点就被这个问题折腾过,今天再次被折腾,心里很不舒服,所以写博客一吐为快!

作为一名长期使用微软平台的程序员,即使没遇到这个URL重写问题,我也对URI Path中少一个斜杠很不习惯!

【补充】

在微软的Url Rewrite module的帮助文档URL Rewrite Module Configuration Reference中,可以找到微软心目中的URI标准是这样的:

For an HTTP URL in this form: http(s)://<host>:<port>/<path>?<querystring>

不走标准路的微软:少一个斜杠的URI Path的更多相关文章

  1. (转载)PHPCMS V9专题路径多了一个斜杠的解决办法

    PHPCMSV9的专题,在设置生成静态并且网站的静态设置成生成在根目录的时候,专题路径的URL中会多出一个斜杠,如:http://www.2cto.com//special/ddos/ ,我只能说这是 ...

  2. js文件中三斜杠注释///reference path的用途

    编辑某个js文件时,要想这个js文件出现其他js成员的ide提示,可以在js文件开头使用3个斜杠注释和reference指令的path指向此js文件路径,这样在编写这个js文件时,ide就会自动出现p ...

  3. Servlet处理带尾部斜杠/的URI

    有一个需求:让一个Servlet能够同时处理形如/XXX/YYY和/XXX/YYY/的URI,即URI尾部的斜杠有没有都要能处理到. 很容易想到,做两个URL Pattern/XXX/YYY和/XXX ...

  4. Eclipse进行Debug时断点上有一个斜杠,并且debug没有停在断点处

    断点上有斜杠,这是由于设置了Skip All Breakpoints的缘故,调试会忽略所有断点,执行完,只需取消Skip All Breakpoints即可,操作:Run-->Skip All ...

  5. 在eclipse程序中设置的断点上有一个斜杠,正常启动debug不能够跳转到debug页面,怎么解决

    在run菜单里面,把skip all breakpoints 选项勾去即可,这个选项可能是你无意间选上的.

  6. js 获取字符串中最后一个斜杠后面的内容

    var str = "/asdasf/asfaewf/agaegr/trer/rhh"; var index = str .lastIndexOf("\/"); ...

  7. 10. js截取最后一个斜杠后面的字符串

    var startIndex = filePath.lastIndexOf("\\"); endIndex = filePath.lastIndexOf("." ...

  8. js截取最后一个斜杠之后的内容

    var str = "/asdasf/asfaewf/agaegr/trer/rhh"; var index = str .lastIndexOf("\/"); ...

  9. 【解决了一个小问题】golang go.mod中多了一个斜杠导致replace无效

    replace github.com/sxxx/common_lib/src/ => ../../common_lib/src 修改成 replace github.com/sxxx/commo ...

随机推荐

  1. iOS 开发系列:CoreData Object 变成 Fault 的一种方式

    @quote: 近来一直与 CoreData 打交道.这是一个架构庞大.学习曲线比較陡峭的 iOS 组件,每次遇到问题都会对其有新的认识. 这次就仅仅讲一点,关于错误认知 Object(NSManag ...

  2. C++编程 - tuple、any容器

    C++编程 - tuple.any容器 flyfish 2014-10-29 一 tuple tuple是固定大小的容器,每一个元素类型能够不同 作用1 替换struct struct t1 { in ...

  3. markdown 转 pdf 方法

    (1)Mou: (macosx 系统下的markdown编辑器,转pdf完美,推荐) http://25.io/mou/ (2)Chrome 打印 (打印得很好看,缺点是转好的pdf上的文字有时候不能 ...

  4. JavaSE(八)集合之List

    前面一篇的corejava讲的是集合的概述,这一篇我将详细的和大家讲解一下Collection下面的List.set.queue这三个子接口.希望大家能得到提升. 一.List接口 1.1.List接 ...

  5. ActiveMQ-5.13.0集群

    ActiveMQ集群介绍 ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave(ActiveMQ5.8版本已不可用 ...

  6. iOS 自动编译脚本

    #!/bin/sh #项目路径 PROJECT_DIR="/Users/mac/Desktop/_housemart" #临时项目 PROJECT_TEMP_DIR="/ ...

  7. OpenCV学习:OpenCV文件一览

    了解一些OpenCV代码整体的模块结构后,再重点学习自己感兴趣的部分,会有一种一览众山小的感觉~ Come on! C:\OpenCV\opencv\build\include文件夹下包含两个文件夹: ...

  8. 如何才能知道外线是FSK还是DTMF制式?

    在直线上接上来电显示话机,然后用手机或其他电话拨接电话的外线号码. 1.如果是先振铃后来显,就是FSK制式. 2.如果先送来显,再振铃或来显和振铃同时响应,就是DTMF制式 交换机默认配置是FSK制式 ...

  9. Python 进阶(三)面向对象编程基础

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkMAAAFGCAIAAADmfgziAAAgAElEQVR4nOx993vT1v7/93/5EEt2Eg

  10. express——crud

    使用express框架做一个简单的增删改查demo,先上效果图: 1.使用webstrom新建一个express项目,建好的项目文件是这样的: 2.直接上代码,方便学习db.js /** * Crea ...