未启用父路径而导致的HTTP 500内部服务器错误
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chinesetoon.blog.51cto.com/326106/63318 |
“HTTP 500 - 内部服务器错误”引起的原因有多个,初学者比较常见的就是没有启用让IIS支持父路径的功能。这也是我曾经遇到的问题,在windows2000 server下调试好的程序,到了windows2003 server下便出现“HTTP 500 - 内部服务器错误”,当时百思不得其解。这是由于“启用父路径”会带来安全问题,在windows2003上默认是不选的(见后文中引用的微软网站的文章)。
启用父路径的操作步骤如下:
1、启动IIS,在【默认网站】上右键单击,在弹出的菜单中选择【属性】,如图1所示;
![]() ![]() ![]() “启动会话状态”,表示一个客户如果在设定期限内没有活动,则服务器会自动放弃保存客户端的信息以及其他相关的信息。默认的设置时间为20分钟。 症状 默认情况下启用活动服务器页 (ASP) 代码使用下列父目录批注: <!-- #include file="..\default.htm"--> 原因 MetaBase 中 AspEnableParentPaths 属性指定 ASP 可允许到当前目录相对路径 (我使用 \ 表示法)。 这可能会带来安全风险。 增强安全性的环境, 中 AspEnableParentPaths 属性应设置为 False, 但 Internet Information Server 4.0 的默认安装将它设置为 True。 注意 : 禁用 ASP 父路径仅影响 .asp 网页上动态内容执行。 这不会影响服务器能力来引用静态内容使用 HTML 代码 (是否 .htm、 .html 或 .asp 文件中调用它)。 下行 default.asp 中会正确显示图像不返回 ASP 0131 错误, 即使 AspEnableParentPaths = False: < = img src " 按钮 /images/logo.jpg " > 替代方法 要解决此问题, 执行以下步骤: 1. 在 Microsoft 管理控制台打开 Internet 服务管理器。 2. 右击 Web 服务器问题。 3. 在弹出菜单上选择属性。 4. 单击主目录选项卡。 5. 在应用程序设置框中选择配置。 6. 单击 App 选项选项卡。 7. 清除启用父路径选项。 8. 单击确定两次以返回到 Microsoft 管理控制台。 状态 Microsoft 已经确认这将 IIS 版本 4.0 和 5.0 中有问题。 解决方案:摘录下来的,,学习中....
使用SSI(Server Side Include)指令中的#Include
asp包含文件的写法是这样的: 在html中,写: <!-- #include file = "FileName" --> <!-- #include Virtual = "FileName" --> file和Virtual的区别在于file使用相对路径 而Virtual是你的web站点内虚拟目录的完整虚拟路径 比方: <!-- #include file = "inc/char.inc" --> 就表示包含当前文件所在的虚拟目录路径下面的inc目录下的char.inc 写成 virtual就可能就需要这么写了 <!-- #include virtual = "/myweb/inc/char.inc" --> --------------------- 十一、包含文件 “Server-side include”命令提供了一种方式,可在 Web 服务器处理文件之前在该文件中插入其他文件的内容。ASP 只执行该机制的 #include。要将文件插入 .asp 文件,可使用下面的语法: <!-- #include virtual | file ="filename" --> 关键字“virtual”和“file”表示用来包含文件的路径类型,“filename”表示想要包含文件的路径和文件名。 被包含的文件并不要求具有特定的文件扩展名;但是,赋予被包含文件 .inc 的扩展名是一个良好的编程习惯,这样有助于将它们与其他类型的文件区分开来。 使用 Virtual 关键字 使用关键字“virtual”来表示以虚拟目录开始的路径。例如,如果文件 Footer.inc 驻留在虚拟目录 /Myapp 中,则下面的行会将 Footer.inc 的内容插入到包含该行的文件中: <!-- #include virtual ="/myapp/footer.inc" --> 使用 File 关键字 使用关键字“file”来表示相对路径。相对路径以包含文件所在的路径开始。例如,如果文件 Header1.inc 在 Myapp\Headers 中,并且 Myapp 中有一个文件,则下面的行会将 Header1.inc 插入到该文件中: <!-- #include file ="headers\header1.inc" --> 注意,被包含文件 Headers\header1.inc 的路径相对于包含文件;如果包含该“#include”语句的脚本不位于目录 /Myapp 中,语句将不起作用。 也可以使用关键字“file”和语法 (..\) 来包含父目录或更高层目录中的文件,但必须选中 Internet 信息服务管理单元中的“启用上层路径”选项。 有关说明,请参阅配置 ASP 应用程序。 被包含文件的位置 ASP 检测被包含文件的变化(不考虑位置),并当浏览器下一次请求包含该文件的 .asp 文件时插入该文件内容。不过,通常说来,如果包含文件驻留在相同应用程序或 Web 站点内部,则很容易维护这些文件的安全。若需要更高安全性,最好将包含文件放到应用程序内的单独目录中(如 \Includes),并且只应用适当的“执行”(Web 服务器)权限。详细信息,请参阅设置 Web 服务器权限。 要点 默认情况下,对所有文件应用 Web 服务器“读取”权限。不过,要防止用户查看包含文件的内容,可以禁用 Include 目录的“读取”权限。 包含文件:提示和警告 被包含的文件也可以包含其他文件。只要“#include”命令不导致循环,.asp 文件也可以多次包含同一文件。例如,如果文件 First.asp 包含文件 Second.inc,则 Second.inc 不能反过来包含 First.asp。文件也不能包含其自身。ASP 检测这样的循环或嵌套错误,生成错误消息,并停止处理请求的 .asp 文件。 ASP 在执行脚本命令之前包含文件。因此,不能使用脚本命令来建立被包含的文件名。举例来说,因为 ASP 试图在将文件名指派给变量 name 之前执行“#include”命令,所以下面的脚本无法打开文件 Header1.inc。 <!-- 该脚本将失败 --> <% name=(header1 & ".inc") %> <!-- #include file="<%= name %>" --> 脚本命令和过程必须完全包含在脚本分隔符 <% 和 %> 内,即 HTML 标签 <SCRIPT> 和 </SCRIPT>,或 HTML 标签 <OBJECT> 和 </OBJECT> 内部。也就是说,不能在包含 .asp 文件中打开脚本分隔符,并在被包含的文件中关闭分隔符;脚本或脚本命令必须是一个完整的单元。例如,下面的脚本将不起作用: <!-- 该脚本将失败 --> <% For i = 1 To n 主文件中的语句 <!-- #include file="header1.inc" --> Next %> 但下面的脚本会起作用: <% For i = 1 to n 主文件中的语句 %> <!-- #include file="header1.inc" --> <% Next %> 注意 如果 ASP 脚本包含的文件中存在包含脚本不需要的大量函数和变量,则这些无用的结构反而会影响性能,并最终降低 Web 应用程序的伸缩性。因此,通常将包含文件分成多个小文件,并且只包含那些服务器端脚本必需的文件,而不是包含那些带有冗余信息的一个或多个大型包含文件。 有时,可能需要使用 HTML <SCRIPT></SCRIPT> 标签来包含服务器端文件。例如,下面的脚本包含服务器可以执行的文件(使用相对路径): <SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="Utils\datasrt.inc"></SCRIPT> 下表说明通过 SRC 属性使用虚拟或相对路径来包含文件的正确语法: 路径类型 语法 示例: 相对 SRC="Path\Filename" SRC="Utilities\Test.asp" 虚拟 SRC="/Path/Filename" SRC="/MyScripts/Digital.asp" 虚拟 SRC="\Path\Filename" SRC="\RegApps\Process.asp" 注意 当使用此方法包含文件时不要在 <SCRIPT> 标签内放置任何程序逻辑;使用另外一组 <SCRIPT> 标签来添加这样的逻辑。 本文出自 “读书进行时...” 博客,请务必保留此出处http://chinesetoon.blog.51cto.com/326106/63318 本文出自 51CTO.COM技术博客 |





chinesetoon
博客统计信息
热门文章
最新评论
友情链接