我看到了类似的问题,但我的情况略有不同:
我在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文件夹打开一个ASP页面(例如“DCN \ Trouble \ Search.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文件夹中创建一个子文件夹,我可以包含它的文件,但很明显,这并不理想。
任何建议都将不胜感激。我不禁想到这是微不足道的。提前谢谢!
答案 0 :(得分:7)
Yots是正确的,听起来父路径已关闭。如果您无法启用这些,请改为使用虚拟路径:
根据您的问题,您说明包含文件位于/DCN/lib
,然后执行以下操作:
<!-- #include virtual="/DCN/lib/my_include_file.asp -->
使用虚拟路径时,您必须指定文件的完整虚拟路径,即从站点的根目录。如果您正在开发机器上的子文件夹中构建应用程序,而您正在使用XP然后部署到生产计算机的根目录中,那么这并不理想。这就是说Vista或Windows 7上的IIS7允许现在创建多个站点**。
使用路径类型File="..."
时, filename 必须位于包含#include的文件夹的相对路径上。例如:
指令<!-- #include file="my_include.asp" -->
将包含来自同一文件夹的my_include.asp
。
指令<!-- #include file="lib/my_include.asp" -->
将包含my_include.asp
来自运行脚本的当前文件夹下面的文件夹lib
。
指令<!-- #include file="../my_include.asp" -->
将包含my_include.asp
来自运行脚本的当前文件夹(父文件夹)上方的文件夹lib
。
指令<!-- #include file="../lib/my_include.asp" -->
将包含来自文件夹my_include.asp
的{{1}},该文件夹是父文件夹(或当前文件夹的兄弟)的子文件。
如果未启用父路径,则最后两个示例将不起作用。
** 我知道在XP的IIS5.1中启用多个IIS站点存在黑客攻击。
答案 1 :(得分:5)
我认为您的问题是IIS中默认禁用父路径。
您有两种选择:
有关详细信息,请从IIS网站上阅读本文 http://learn.iis.net/page.aspx/566/classic-asp-parent-paths-are-disabled-by-default/
答案 2 :(得分: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
位置有谜。