我在IIS8上有一个ASP.NET站点,但IIS7.5的行为完全相同。 当我input一个URL如:
mysite.com/foo/bar..
我得到以下错误与'500内部服务器错误'状态代码:

即使我有自定义错误页面设置为500和404,我没有看到我的自定义错误页面有什么问题。
在我的web.config system.web节点中,我有以下几点:
<customErrors mode="On"> <error statusCode="404" redirect="/404.aspx" /> </customErrors>
如果我删除该部分,我得到一个404.0响应,但页面本身是空白的。
在web.config system.webServer我有:
<httpErrors errorMode="DetailedLocalOnly"> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="404.html" responseMode="File" /> </httpErrors>
但是不pipe有没有,我得到相同的空白404.0页面,而不是我预期的自定义错误页面,或至less一个内部IIS消息。
所以首先,为什么asp.net处理程序会提取“..”的请求(也可以使用一个或多个尾随点)
如果我从applicacationHost.config中删除以下处理程序:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
我得到了我的预期的自定义404页面,但当然删除该处理程序打破了asp.net中的路由等等。
看看我看到的失败痕迹:

Windows身份validation已禁用该站点,那么为什么该模块甚至在请求pipe道?
现在我的修补程序是使用以下规则使用URL重写模块:
<rewrite> <rules> <rule name="Trailing Dots" stopProcessing="true"> <match url="\.+$" /> <action type="Rewrite" url="/404.html" appendQueryString="false" /> </rule> </rules> </rewrite>
这工作正常,但我想知道为什么IIS / ASP.NET的行为呢?
有关于此的KB: http : //support.microsoft.com/kb/2520479
其结果是有一个操作顺序问题,其中各种function的.NET处理程序混淆和misdirect的东西。 某些.NET处理程序将url重写为扩展名forms,他们可能会吓坏其他东西。
短暂的解决方法是将所有“ExtensionlessUrlHandler”处理程序移动到列表的最后,在添加了可能会触及PathInfo数据的任何自定义的处理程序之后。
这可能不是你确切的错误,但它是值得尝试。 值得记住的是,处理程序的顺序是通过ApplicationHost.Config中的ADD命令和相关的configuration文件来configuration的!
在httpRuntime部分中添加此属性可以帮助您:
<configuration> <system.web> <httpRuntime ... relaxedUrlToFileSystemMapping="true" .../> </system.web> </configuration>
获取或设置一个值,该值指示HTTP请求中的URL是否必须是有效的Windows文件path。
有关relaxedUrlToFileSystemMapping的更多信息