IIS問題解決:URL中定位字元引起的Bad Request - Invalid URL

來源:互聯網
上載者:User

標籤:

昨天處理好了Google網站管理員中的500錯誤,今天處理了一些400處理,比如下面的以定位字元(tab)結尾的URL:

http://www.cnblogs.com/me-sa/archive/2008/05/16/1200329.html%09http://www.cnblogs.com/JimmyZhang/archive/2007/12/20/1006555.html%09...

訪問這些URL時,IIS會返回400 bad request的錯誤:

Bad Request - Invalid URL

HTTP Error 400. The request URL is invalid.

這個錯誤頁面是由IIS的底層http.sys直接返回的,既不能自訂錯誤頁面,也不能進行URL重寫。而我們想要的結果是訪問這樣的URL時,能自動跳轉至正確的URL(去掉結尾的定位字元)。

於是想藉助IIS URL Rewrite Module來實現,但現在請求直接被http.sys在底層攔截了,根本到達不了URL Rewrite Module。還好,可以通過註冊表設定讓http.sys不攔截這樣的URL。

註冊表設定方法如下:

  • regedit開啟登錄編輯程式,進入HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
  • 添加索引值:AllowRestrictedChars REG_DWORD 1 (預設為0,會攔截\x00-\x1F與\x7F-\x9F的字元,定位字元的ASCII碼是\x09)
  • 重啟http.sys與IIS,使註冊表的設定生效:
net stop httpnet start httpiisreset

這樣設定之後,URL中包含定位字元的請求就能到達IIS URL Rewrite Module,然後用一條URL重寫規則進行重新導向跳轉。結果卻發現根本不起作用,沒進行跳轉,依然是400錯誤,只不過現在是由ASP.NET返回的。

HTTP Error 400.0 - Bad Request

ASP.NET detected invalid characters in the URL.

這估計是URL Rewrite Module的一個小bug。

後來採用了一個折衷的解決方案,不進行重新導向跳轉,只進行URL重寫,這樣雖然URL不對,但至少頁面可以正常訪問。

於是最終採用了下面的URL重寫規則折衷地解決了問題:

<rule name="endwith_tab" stopProcessing="true">    <match url="^([^.]+\.(?:html|aspx))[\x09]" />    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />    <action type="Rewrite" url="{R:1}" appendQueryString="false" /></rule>

【參考資料】

Http.sys registry settings for Windows

Use of special characters like ‘%‘ ‘.’ and ‘:’ in an IIS URL 

IIS問題解決:URL中定位字元引起的Bad Request - Invalid URL

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.