Asp classic 经典asp页面包含(.inc)文件的IIS处理程序映射

Asp classic 经典asp页面包含(.inc)文件的IIS处理程序映射,asp-classic,include,Asp Classic,Include,我正在向IIS 10中托管的较新版本的Windows server授予一个经典ASP站点 加载default.asp页面时,我在浏览器的开发者工具“网络”选项卡中发现,helpers.inc文件无法找到。但它与默认页面位于同一文件夹中 以下代码在default.asp页面中调用helpers.inc文件: <script src="helpers.inc" language="VBScript" defer="true"></script> 我尝试使用%windir%\

我正在向IIS 10中托管的较新版本的Windows server授予一个经典ASP站点

加载default.asp页面时,我在浏览器的开发者工具“网络”选项卡中发现,helpers.inc文件无法找到。但它与默认页面位于同一文件夹中

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

<script src="helpers.inc" language="VBScript" defer="true"></script>
我尝试使用%windir%\system32\inetsrv\asp.dll可执行文件为*.inc文件添加处理程序映射,但它似乎不起作用。给我一个新的错误:

HTTP错误404.17-找不到
请求的内容似乎是脚本,静态文件处理程序不会提供这些内容。
最可能的原因:
•请求与通配符mime映射匹配。请求被映射到静态文件处理程序。如果有不同的前置条件,请求将映射到不同的处理程序。

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

include可以工作,但Lankymart的答案是正确的

我创建了helpers.inc文件:

Sub MakeAMsg(MsgText)
    MsgBox MsgText
End Sub
我使用了Include并保留了.inc扩展名:

<script language=VBS>
<!--#include file=helpers.inc-->
makeamsg("This Used Include")
</script>
<SCRIPT language=VBS src=helpers.vbs></SCRIPT>
<script language=VBS>
makeamsg("This Used Script tags with vbs extension")
</script>

makeamsg(“使用的包括”)
它起作用了。我使用VBS扩展名重命名了.inc:

<script language=VBS>
<!--#include file=helpers.inc-->
makeamsg("This Used Include")
</script>
<SCRIPT language=VBS src=helpers.vbs></SCRIPT>
<script language=VBS>
makeamsg("This Used Script tags with vbs extension")
</script>

makeamsg(“此使用的脚本标记具有vbs扩展名”)
这也行得通

我检查了服务器,默认情况下,vbs设置为文本/vbscript的mimetype。(我正在设置另一个我没有改变任何东西的地方,它也有这个映射。)
因此,使用#include确实有效,但将扩展名更改为.vbs或添加与.vbs mime类型重复的mimetype会更好。

如果这一行是它在迁移代码中的显示方式(无需任何修改)

  • 使用带有
    runat=“server”
    属性的脚本标记

    <script language="VBScript" runat="server">
        ...
    </script>
    

  • 有用的链接
    • (用于不为客户端脚本使用
      .inc
      扩展的参数)


    我的理解(我可能错了)是,.inc文件被视为普通文本文件,更多用于模板集成,而不是包含asp代码的页面,尽管.inc文件中包含的VBscript如果包含在asp页面中,仍将执行。默认情况下,IIS不会将它们视为与.asp文件相同的文件。我一直避免使用它们,因为我从来没有真正了解这一点(事实上,它们看起来相当危险)。首先检查.inc文件中包含的内容,但只需添加MIME类型即可。@Adam,这只是VBScript函数。我尝试过如果我将helpers.inc中的代码复制到脚本标记中,页面就会正确加载。抱歉,不熟悉处理程序映射,您提到添加MIME类型,是否在IIS中,单击网站/应用程序->MIME类型->添加新的MIME类型?如果是,我应该在这里使用什么MIME类型?文本/纯文本?非常感谢。我可能会等待其他人的评论,因为我不是100%确定inc文件。但是,是的,文本/纯文本将是我使用的MIME类型。但是,重申一下,;如果你的inc文件在一个公共目录中,它们的源代码将被公开。如果只是VB函数,为什么不使用呢?我管理一个古老的经典ASP应用程序,这就是加载VB函数的方式。阅读重复的问题@Lankymart posted,似乎设置mime映射对于inc文件来说是个坏主意,因为它们显然不打算由IIS直接提供服务。这很有道理。您收到的错误消息是正确的,IIS应该阻止您通过HTTP加载inc文件。问题是您没有正确地包含它们(如已回答的)。将inc文件用作SSI不需要mime映射。
    language=vbs
    是否是客户端VBScript的可接受标识符?
    。vb
    文件,您在谈论使用vb.Net的ASP.Net吗?SSI是一种IIS功能,允许在经典ASP页面中包含服务器端脚本。通常它们只使用
    .asp
    扩展名(这是默认的处理程序映射扩展名),但有时它们被重命名为
    .ssi
    .inc
    ,以表示它们是
    #包含
    文件。但是,我认为这不是SSI,因为脚本标记不能像那样用于调用服务器端脚本。@Lankymart是的,它是客户端和服务器端VBScript的有效别名。JScript甚至更糟糕
    ECMAScript
    JavaScript
    JavaScript1.1
    JavaScript1.2
    JavaScript1.3
    LiveScript
    所有指向
    JScript
    :/@Lankymart在我们编写的应用程序中工作,我从未更改过它。值得一提的是,如果您使用文件作为服务器端包含,则不管文件扩展名是什么,IIS都会将其解析,就像它是包含它的页面的一部分一样。.inc扩展名只是一种惯例,用于向编码人员标识它是一个包含文件。那么您建议他如何解决他的问题?@Julie这取决于
    .inc
    文件是什么。如果它包含服务器端脚本(处理器标记或服务器端脚本标记),则不应直接访问它,因此
    404.17
    是正确的行为,OP需要使用
    #include
    语法,以允许它在ASP页面内运行。如果没有,则OP需要为
    .inc
    添加MIME类型映射,否则它将继续返回
    404.3
    ,这是未映射文件类型的默认行为。但正如我已经说过的,如果OP提供的脚本标记是迁移的web应用程序中的“原样”,那么它就不能是SSI。@Lankymart,对不起,直到我回复完上面每个人的评论后才注意到答案。回答得很好。我尝试了您列出的第三种方法,现在asp页面显示了我创建的Helpers.asp页面中的所有函数源代码,其中包含复制的所有内容
    <!-- #include virtual = "somefile.asp" -->