我使用以下自定义标头和重写规则来删除服务器响应标头IIS 8.5,但是在Firefox或Chrome上打开网络监视器并指向状态为404的任何文件(以及丢失的图像)时, )或302 (以及aspxerrorpath重定向中缺少目录或请求的文件)使我能够看到原始标题。
例如,Microsoft网站隐藏了此信息和标头,但是访问URL like this将使我轻松确定服务器和IIS版本:
服务器 Microsoft-IIS / 10.0
X-AspNet版本 4.0.30319
X-Powered-By ASP.NET
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By-Plesk" />
<add name="Server" value="CustomName" />
</customHeaders>
</httpProtocol>
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Headers 1">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
<rule name="Remove Headers 2" patternSyntax="ExactMatch">
<match serverVariable="RESPONSE_SERVER" pattern=".*" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
是否可以从IIS 8.5或Web.Config中修复此问题,而不必从我的ASP.NET C#代码中修复此问题?
答案 0 :(得分:0)
我认为这不是一个很好的答案,但这是一个潜在的解决方法,具体取决于您的站点配置。在IIS 8.5上进行的实验表明,出站重写规则在状态代码错误处理程序(即错误页面响应)或302重定向中已被充分忽略,以响应将服务器标头保留为默认状态的错误状态。但是,如果您重定向到站点的URL,则将触发“出站重写”规则。
因此,web.config中的类似内容将重定向到网站的根目录,并且将触发出站规则。
<删除statusCode =“ 404” subStatusCode =“-1” />
<错误statusCode =“ 404” path =“ /” responseMode =“ ExecuteURL” />
如果可以提供静态内容,则可以添加文件(例如/errors/404.htm),然后相应地更改路径。当您收到404错误时,将返回404.htm文件,并且将触发出站规则。但是,请注意,每个错误状态都会出现此问题,因此可以解决404错误,但其他错误也必须以类似的方式处理。
答案 1 :(得分:0)
解决方案是在URL规则中添加URL重写规则,而不是在IIS管理器中的站点级别,而是在服务器级别。您也可以直接编辑Web服务器上C:\ Windows \ System32 \ inetsrv \ config \上的applicationHost.config文件。这些方法中的任何一种都会将此规则级联到IIS中的每个站点。在执行此操作之前,请确保删除可能已为所有子站点添加的此重写规则,否则在服务器级别添加该规则时将重复该规则并导致错误。我已经确认这可以在IIS 8.5中使用。
答案 2 :(得分:0)
通过将“ runAllManagedModulesForAllRequests =“ true”“添加到web.config中的标记,我能够删除默认404错误页面上的“服务器:Microsoft-IIS / 8.5”响应标头。我必须对服务器上的每个站点执行此操作。没错,此解决方案无法修复默认的400个“错误请求”错误页面。
进行此更改后,我尚未测试性能。其他人说添加“ runAllManagedModulesForAllRequests =” true“”可能会导致性能下降。
此解决方案来自Rick Strahl的网站:https://weblog.west-wind.com/posts/2012/oct/25/caveats-with-the-runallmanagedmodulesforallrequests-in-iis-78
在此处将其放入您的web.config文件中。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" >
...
</modules>
</system.webServer>