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

我们先来看一下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. MySQL创建用户、授权、撤销权限、删除用户

    一.创建用户 mysql -u root -p 1.mysql->create user 'test'@'localhost' identified by '123'; 2.mysql-> ...

  2. 学习 C++,关键是要理解概念,而不应过于深究语言的技术细节

    学习 C++学习 C++,关键是要理解概念,而不应过于深究语言的技术细节. 学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统. C++ 支 ...

  3. 如何解决ChemDraw引起的系统崩溃

    运行ChemDraw应用程序时,一般不会引起系统崩溃,但在使用CS software产品可能会引发计算机崩溃.为了方便广大用户的使用,本教程将教授大家如何解决ChemDraw运行中引起的系统崩溃. 当 ...

  4. 如何用MathType快速输入公式

    我们在写论文的时候,如果涉及到数学公式的话,我们一般都会使用MathType软件,但同时对于一些新手来说不太用使用此款软件,输入公式时就会很慢,今天教大家如何利用MathType快速输入公式. 具体方 ...

  5. ros网址链接

    安装教程:http://wiki.ros.org/cn/indigo/Installation robotics:http://www.rethinkrobotics.com/ 学习教程:http:/ ...

  6. ros论坛

    ros:http://ros.gaitech.net/forum.php makefile:http://blog.csdn.net/shallnet/article/details/38070745 ...

  7. Linux buffer/cache异同

    buffers与cached 1).异同点 在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序:当需要往文件中 ...

  8. swift--添加新手引导页

    swift和oc逻辑上都是一样的,只是写法不一样,可以使用一个view,也可以使用一个viewController,两种都可以的,使用view注意初始化的时候给他一个frame,vc的话,直接在本控制 ...

  9. linux系统socket通信编程1

    Linux下的Socket编程大体上包括Tcp Socket.Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较 ...

  10. solr学习笔记-linux下配置solr(转)

    本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...