在一個專案中用了Kendo UI,透過NuGet取得Kendo套件,JavaScript被放在/Scripts/kendo/2013.1.319/*路徑下。本機測試無誤後丟到Windows 2003 IIS6測試台,發現所有連到/Scripts/kendo/2013.1.319/*及/Content/kendo/2013.1.319/*的URL都傳回HTTP 404 Page Not Found。

依之前有ASP.NET MVC Routing與"."不合的經驗(延伸閱讀: Handing MVC paths with dots in the path),直覺是"."出問題,試著將"."改成"-"果然就正常。只是,這次專案是純HTML,連ASP.NET都沒用到,ASP.NET Routing有不在場證明,而且印象中IIS並沒規定URL的路徑不允許使用".",Kendo UI規劃這種路徑豈不自找麻煩。

經過一番追查,在IIS Log找到線索:

2013-05-02 07:40:54 192.168.1.1 GET /Rejected-By-UrlScan ~/poc/Content/kendo/2013.1.319/kendo.meg-default.css 80 - 192.168.1.168 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.31+(KHTML,+like+Gecko)+Chrome/26.0.1410.64+Safari/537.31 404 0 2

原來是測試台安裝了UrlScan,從中做梗!

找到C:\WINDOWS\system32\inetsrv\urlscan\UrlScan.ini,其中有條設定:
AllowDotInPath=0

將0改成1,問題排除~

PS: 依查到的文件,AllowDotInPath=1的風險在於UrlScan附檔名過濾挸則可能失效,而這方面IIS已經強化很多,不致衍生資安問題,應可安心調整。


Comments

Be the first to post a comment

Post a comment