【问题标题】:Why isn't #include working on .asp page in IIS7.5?为什么#include 不能在 IIS7.5 中的 .asp 页面上工作?
【发布时间】:2011-04-25 15:45:31
【问题描述】:

我看到了一个与此类似的问题,但我的问题略有不同:

在 IIS 7.5 服务器 (R2008 V2) 上运行 #include 文件时,我得到了间歇性的结果。我的包含仅在它们与当前 .asp 页面位于同一文件夹中或当前页面的子文件夹中时才有效。这很不方便,因为我想将它们全部保存在主页面之外的 /lib 子文件夹中。

我的配置:我有一个名为 DCN 的文件夹,位于 wwwroot 文件夹的正下方。 DCN文件夹内的/lib文件夹中有几个文件,所以绝对路径是c:\inetpub\wwwroot\dcn\lib\my_include_file.asp。如果我在 DCN 文件夹中打开一个 ASP 页面,我可以从 /lib 子文件夹中提取包含文件。但是,如果我从 DCN/trouble 文件夹(例如“DCN\Trouble\Search.asp”)打开一个 ASP 页面,并且 search.asp 页面有一行显示:

<!--#include file="../lib/my_include_file.asp"-->

包含失败,我收到 500 错误。

我也试过了:

<!--#include file="/lib/my_include_file.asp"--> 

结果相同。与:

<!--#include file="/DCN/lib/my_include_file.asp"-->

我将斜杠改为反斜杠,结果相同。我什至尝试过:

 <!--#include file="c:\inetpub\wwwroot\dcn\lib\my_include_file.asp"-->

(完全绝望),但我仍然得到相同的结果。

如果我在 dcn\trouble 文件夹中创建一个子文件夹,我可以包含其中的文件,但显然这并不理想。

任何建议将不胜感激。我不禁认为这是微不足道的事情。提前致谢!

【问题讨论】:

  • 你检查过 lib 文件夹中的 ACL 吗?

标签: asp-classic iis-7.5 server-side-includes


【解决方案1】:

我认为您的问题是在 IIS 中默认禁用父路径。

你有两个选择:

  1. 使用虚拟路径
  2. 在 IIS 上启用 ASP 父路径

有关详细信息,请阅读 IIS 网站上的这篇文章
http://learn.iis.net/page.aspx/566/classic-asp-parent-paths-are-disabled-by-default/

【讨论】:

  • &lt;!--#include file="/lib/my_include_file.asp"--&gt; 即使在禁用父路径时也应该工作
  • @eduardo - 不会,他需要改用&lt;!-- #include virtual="..." --&gt;&lt;!--#include file="..." --&gt; 只支持相对路径。
  • 就是这样。非常感谢您的帮助!
【解决方案2】:

Yots 是正确的,听起来父路径已关闭。如果您无法打开这些,请改用虚拟路径:

根据您声明包含文件在 /DCN/lib 中的问题,然后执行以下操作:

<!-- #include virtual="/DCN/lib/my_include_file.asp -->

使用虚拟路径时,您必须指定文件的完整虚拟路径,即从站点的根目录开始。如果您在使用 XP 的开发机器上的子文件夹中构建应用程序,然后部署到生产机器的根目录中,这并不理想。也就是说,Vista 或 Windows 7 上的 IIS7 现在允许创建多个站点**。

当使用File="..." 的路径类型时,文件名 必须位于包含#include 的文件夹的相对路径上。例如:

指令&lt;!-- #include file="my_include.asp" --&gt; 将包含来自同一文件夹的my_include.asp

指令&lt;!-- #include file="lib/my_include.asp" --&gt; 将包含来自当前运行脚本的文件夹lib 下的my_include.asp

指令&lt;!-- #include file="../my_include.asp" --&gt; 将包含来自运行脚本的当前文件夹(父文件夹)上方的文件夹lib 中的my_include.asp

指令&lt;!-- #include file="../lib/my_include.asp" --&gt; 将包含来自文件夹libmy_include.asp,该文件夹是父文件夹(或当前文件夹的同级文件夹)的子文件夹。

如果未启用父路径,最后两个示例将不起作用。

** 我知道有一些黑客可以在 XP 的 IIS5.1 中启用多个 IIS 站点。

【讨论】:

    【解决方案3】:

    #include virtual 呢?如果显示:

    #include virtual="\mysite\include\file.inc
    

    它应该在 mysite 下的 include 文件夹中找到 file.inc 吗?我已经启用和禁用了父路径并尝试了大约一百万件事。我仍然收到asp 0126 error 未找到文件。我可以将其切换为包含文件,然后它会找到它,但是 file.inc 有一堆其他包含,然后无论我如何将其更改为包含文件或虚拟文件,它都无法找到它们。它适用于 IIS 6,但不适用于我将此站点移至的 IIS 7。这是一个经典的 asp 页面,大部分内容都在包含文件中完成

    我在Default Web site\dept_Sites\mysite 位置有我的网站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多