我正在处理传统的经典asp应用程序,我想阻止以下划线开头的文件" "通过浏览器请求检索。理想情况下,我希望任何以" "开头的文件显示404未找到的异常。
原因是我不想用.Inc扩展名来命名我的文件因为它使开发变得困难,因为我丢失了语法高亮,智能感知以及我在Visual中使用的其他东西工作室。
由于这是在IIS8中运行的,有什么办法可以在ASP处理程序处理页面之前过滤阻止这些文件的请求吗?
答案 0 :(得分:1)
临时答案:
我在http处理程序中映射了两次ASPClassic。首先,我将其映射到_ * .asp。但是我为asp dll使用了一个无效的dll,这将导致错误:
由于Web服务器上的ISAPI和CGI限制列表设置,无法提供您请求的页面。
这是404.2
然后我映射了正常的* .asp处理程序。
如果HttpHandler与请求匹配,则不会传递给下一个HttpHandler。所以匹配请求的第一个HttpHandler就是使用它的那个。
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<remove name="ASPClassic"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
<add name="ASPClassic_No" path="_*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll2" resourceType="File" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" />
</handlers>
</web.Server>
此外,服务器端仍然可以处理这些文件,因为SSI不依赖于请求。
如果有人知道这样做的更清洁,非黑客的方式,我全都耳朵!
我之前使用这个asp文件来做这件事:
<%
notFound_fullName = Request.ServerVariables("SCRIPT_NAME")
notFound_pathArray = split(notFound_fullName, "/")
notFound_fname = notFound_pathArray(UBOUND(notFound_pathArray))
If (InStr(1, notFound_fname, "_") = 1) Then
Response.Status ="404 Not Found"
Response.End
End If
%>
但是,我遇到了一个场景,我需要将它包含在页面上包含它的页面上,同时也将它包含在被包含的页面中。
E.g。
_cUser -> include 404handler code (alone with no other includes)
_baseWebService -> Include _AllClasses (includes 404 handler again)
由于选项严格,因此无法使用选项严格,因为它要么重新定义变量,要么未定义变量....