今天又被微軟不按標準的做法折騰了一下,寫篇博文抱怨一下。
我們先來看一下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>
文章列表