多一個“點”給IIS與ASP.NET帶來的問題


【IIS】

一個網站如果用的是IIS(假設沒有在前端7層負載均衡中對這種場景進行特殊處理),只要在瀏覽器地址欄中輸入這個網站的域名並加上“.”,比如:www.cnblogs.com. ,就會引發“Bad Request - Invalid Hostname”錯誤:

www.cnblogs.com.

由於這個錯誤信息是IIS底層直接返回的,如果只從IIS的角度,你沒有任何方法可以對這個錯誤信息進行定制與處理,包括微軟自己。

www.microsoft.com.

要解決這個問題,只能在IIS前端加上非基於IIS的7層負載均衡(或反向代理),比如Nginx、Tengine,然后針對這個場景對主機名進行重寫或者重定向、顯示自定義錯誤信息。

我們目前雖然用了基於Tengine的7層負載均衡(阿里雲SLB),但是SLB並沒有提供針對這個問題的解決方案,所以只能束手無策。

【ASP.NET】

 如果一個網站用的是ASP.NET(假設沒有對以“.”結尾的URL進行重寫),只要在一個URL之后加上“.”,ASP.NET中所有的自定義錯誤設置都形同虛設。

結尾點號引發的404錯誤

微軟msdn博客站點也有這個問題:

asp.net url end with dot

要解決這個問題,需要借助IIS的URL重寫組件(比如Url Rewrite Module)針對這種情況進行URL重寫。

而我們用Url Rewrite Module解決這個問題的過程中發現竟然只能Rewrite,不能Redirect,

Url Rewrite Rule 

如果Action type改為Redirect,依然會顯示之前的錯誤頁面。

這兩個歷史悠久的問題更讓我們對ASP.NET vNext多了一份期待。

【更新】

之前寫的URL重寫規則不能處理以多個點結局的情況,改進后的重寫規則如下:

<rule name="end_with_dot" stopProcessing="true">
    <match url="(.*)[^.]\.+$" />
    <action type="Rewrite" url="{R:1}" />
</rule>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM