文章出處

今天又被微軟不按標準的做法折騰了一下,寫篇博文抱怨一下。

我們先來看一下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>


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()