zoukankan      html  css  js  c++  java
  • 不走标准路的微软:少一个斜杠的URI Path

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

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

    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>

  • 相关阅读:
    yii框架开启事务
    CI框架--事务
    Nginx负载均衡使用ip
    如果nginx启动失败,错误解决
    nginx使用ssl模块配置支持HTTPS访问【解决ssl错误】
    Nginx反向代理+负载均衡简单实现(https方式)
    nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
    openssl生成ssl证书
    POJ 1955 Rubik's Cube
    CF卡技术详解——笔记
  • 原文地址:https://www.cnblogs.com/dudu/p/microsoft-uri-path-without-slash.html
Copyright © 2011-2022 走看看