经典ASP页面include(.inc)文件的IIS处理程序映射

时间:2019-03-08 18:46:09

标签: asp-classic include

我正在将经典的ASP网站迁移到IIS 10中托管的Windows Server的较新版本。

在加载default.asp页时,我在浏览器的开发人员工具的网络选项卡中找到该文件,其中指出找不到helpers.inc文件。但这与默认页面位于同一文件夹中。

通过以下代码在default.asp页中调用helpers.inc文件:

<script src="helpers.inc" language="VBScript" defer="true"></script>

如果我尝试从浏览器访问helpers.inc文件,则会收到此错误:

HTTP Error 404.3 - Not Found
The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

Most likely causes:
•It is possible that a handler mapping is missing. By default, the static file handler processes all content.
•The feature you are trying to use may not be installed.
•The appropriate MIME map is not enabled for the Web site or application. (Warning: Do not create a MIME map for content that users should not download, such as .ASPX pages or .config files.)
•If ASP.NET is not installed.

我尝试使用%windir%\ system32 \ inetsrv \ asp.dll可执行文件为* .inc文件添加处理程序映射,但是它似乎无法正常工作。给我一个新的错误:

HTTP Error 404.17 - Not Found
The requested content appears to be script and will not be served by the static file handler.

Most likely causes:
•The request matched a wildcard mime map. The request is mapped to the static file handler. If there were different pre-conditions, the request will map to a different handler.

我想知道需要什么才能让asp页识别/读取include.inc文件吗?

2 个答案:

答案 0 :(得分:2)

如果此行是它在已迁移代码中的显示方式(未经任何修改)

<script src="helpers.inc" language="VBScript" defer="true"></script>

那么一件事很清楚。

这不是SSI (包含服务器端)

标签将扩展名为.inc的文件定义为客户端 VBScript。不过,目前您还没有告诉IIS .inc是文件类型,它可以用作text/vbscript

  

注意:在页面中定义客户端VBScript将严重限制跨浏览器的兼容性,因为仅older versions of Internet Explorer支持VBScript。


为什么404.3

使用404.3的原因是因为IIS blocks unknown file types。要解决此问题,您需要在IIS中添加一个MIME类型映射,我通常不建议将其作为.inc is sometimes used as an extension for SSI files,但是正如我们已经揭穿了MIME类型映射的理论之路一样。


为什么它不是SSI

只有三种方法可以在Classic ASP页面中运行服务器端脚本;

  1. 使用处理器标签

    <%
        ...
    %>
    
  2. 使用具有runat="server"属性的脚本标签。

    <script language="VBScript" runat="server">
        ...
    </script>
    
  3. 使用#include指令添加SSI。

    <!-- #include virtual = "somefile.asp" -->
    

有用链接

答案 1 :(得分:1)

包含作品,但Lankymart的答案正确。

我创建了一个helpers.inc文件:

Sub MakeAMsg(MsgText)
    MsgBox MsgText
End Sub

我使用了Include并保留了.inc扩展名:

<script language=VBS>
<!--#include file=helpers.inc-->
makeamsg("This Used Include")
</script>

有效。我将.inc重命名为VBS扩展名:

<SCRIPT language=VBS src=helpers.vbs></SCRIPT>
<script language=VBS>
makeamsg("This Used Script tags with vbs extension")
</script>

那也行得通。

我检查了服务器,默认情况下.vbs设置为text / vbscript的模仿类型。 (我正在设置另一个未更改任何内容的地方,它也具有此映射。)

因此,使用#include 确实可行,但是将扩展名更改为.vbs或添加复制.vbs mime类型的mimetype会更好。