少一个斜杠的URI Path

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

我们先来看一下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/)时,匹配规则要写为^$。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/

如果抛开标准不谈,仅仅从使用直觉上,“/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>

时间: 2024-10-28 00:40:06

少一个斜杠的URI Path的相关文章

在eclipse程序中设置的断点上有一个斜杠无法进行debug调试

在菜单里面,把skip all breakpoints 选项勾去即可,这个选项可能是你无意间选上的 或按快捷键"Ctrl+Alt+B" 然后就可以顺利调试了.

伪静态加了 斜杠 / 就不能访问了 求解

问题描述 做了一个HttpApplication伪静态这样的形式可以访问/tags/2_1但是加一个斜杠就不可以访问了在线求解/tags/2_1/这样就不能访问了HttpApplicationapp=senderasHttpApplication;HttpContextcontext=app.Context;HttpResponseresponse=context.Response;if(app!=null){stringrawurl=app.Request.RawUrl;stringurl=a

网页设计理论:斜杠的作用与网站导航

在互联网世界中,斜杠"/"是很常见的一个符号.它的位置在右 Shift 的左边,不用按 Shift 就能够输入. 我猜测(没在维基中查到),斜杠之所以占据那么重要的地位,应该得益于操作系统(Unix.Dos)的流行.在命令行中,一个斜杠往往是表示着根目录,也作为目录与目录之间的分割. 其实到了互联网时代,除了 URL 中可能要用到斜杠外,其他地方很少见到它的身影.但它并没有随着历史而去. 在 Gmail 中,如果你给 label 命名为 abc/def,那么通过 IMAP 维护邮箱时会

java正则表达式匹配斜杠

在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String textString = new String ("\\\&q

VS2013 C++反斜杠怎么无法输入啊?

问题描述 VS2013 C++反斜杠怎么无法输入啊? 用VS2013 C++最近才发现这个问题,用来输入反斜杠无效. 代码如下:(我想在一字符串里输入:E:yeyingying) WCHAR szPath[]=L"E:yeyingying"; 以上代码在下一行断点停下后看变量里的内容居然是:E:yeyingying. 把代码改成如下: WCHAR szPath[]=L"E:yeyingying"; 再断点看内容居然是:E:yeyingying. 不管怎么样都无法输入

java正则表达式,求匹配:双反斜杠(\\)合法,单反斜杠不合法(\)

问题描述 要求是这样的,我想弄一个正则表达式达到双反斜杠(\)合法,单反斜杠()不合法.举个例子:abc123def\ghj.我想这个正则表达式能匹配出第一个d然后提示用户输入错误.但现在我用\[^s"'(\)]后发现他居然把第二个双反斜杠里的最后一个斜杠和后面一个字母匹配出来了,也就是g.很是郁闷,因为按我的要求来说,g前面的双反斜杠应该是合法的.希望我表达清楚了.有没有大神解答下! 解决方案 public static void main(String[] args) {String str

网址带“/”与不带“/” 谈URL中末尾斜杠对SEO的影响

我们经常能看到这样的两种url 1.http://www.abc.com/abc 2.http://www.abc.com/abc/ 这两个网址到底有没区别呢?哪种对于SEO更好?这个问题困扰了我很久,因为我这个人很追求完美,这两个url虽然只有细微的差别,但是我还是想把最好的一种用于我的网站. 对于用户来说,在大多数情况下这两个网址没有任何区别,他们访问的都是网站abc目录下的默认首页.一般用户也都知道最后一个斜杠是可有可无的,他们输入网址的时候一般都只会输入http://www.abc.co

以斜杠组合的一个字符串如何以10为单位分成几个字符串?

问题描述 以斜杠组合的一个字符串如何以10为单位分成几个字符串? string ids = "507/4360/4361/4362/4363/4364/543/555/561/29201/40579/587/637/16989/16990/16991/780/913/914/917/918/9693/947/950/952"; 以10为单位,分成以下几个字符串: string ids1="507/4360/4361/4362/4363/4364/543/555/561/292

配置解决Nginx服务器中WordPress路径不自动加斜杠问题_nginx

问题是这样的:我习惯在博客地址后面直接加"wp-admin"敲回车进入WordPress后台,但是进去以后发现不管我点任何一个管理子项,一律404(找不到页面),瞬间我就囧了,这是神马状况... 仔细看了一下管理子项的链接,发现他们全是类似"//www.jb51.net/blog/edit.php"这样的,关键就在于他们都少了"/wp-admin/"这条路径,路径都不对了,肯定404呗... 知道问题在哪就简单了,而且答案肯定还是在Nginx的重