Google
 
欢迎阅读热点专题
专题简介

路径这个话题,看起来没有什么特别的,尤其是冠以 ASP,更让一些人觉得小儿科,然后要成为 ASP 高手,路径问题是个不可回避的话题。

 
核心阅读
路径定义
  • 绝对路径是包括服务器协议(在本例中为http协议)的完全路径;
  • 相对路径包括根相对路径(Site Root)和文档相对路径(Document)两种。

详情请参阅绝对路径、根相对路径和文档相对路径

父目录

如果不允许父目录,则遇到 Server.MapPath("../db.mdb") 一类的代码时就会出错。在 Windows 2003 等操作系统中默认就是不允许父目录的。微软这样做并不是说父目录不安全,而是有些 ASP 程序有漏洞,通过父目录干了坏事,所以微软干脆默认禁止掉父目录。

详情请参阅 Windows 2003 中允许 ASP 父目录

Server.MapPath

Server.MapPath 是将相对路径转换成物理路径,很常用。问题是在有虚拟目录和斜杠或反斜杠的时候,结果是怎样的?

你可能不理解 Server.MapPath 中的 ../ 这篇文章虽然是基于 ASP.NET,但在 ASP 中是一样的,值得参考。 更深层次的研究可以看看 Server.MapPath 工作原理这篇文章。

#include 问题

#include 使用 file 和 virtual 包含文件时有什么区别?哪个是文档相对路径,哪个是根相对路径?

对于 IIS 来说:file 是文档相对路径,即 file 特性不能以斜杠或反斜杠开始;virtual 是根相对路径,不论 virtual 特性是否是以斜杠、还是反斜杠、还是既非斜杠也非反斜杠开始,均是从站点根目录(不是虚拟目录根目录)开始计算。

当然对其他一些提供 www 服务的软件来说,也许将 file 和 virtual 同等对待,或根本不支持。不论如何,ASP 的路径我们以 IIS 为准。

Server.Execute 与 #include 时的路径问题

Server.Execute 与 #include 均涉及到第二个文件,如果两文件在同一目录倒没有什么问题,而二者不在同一目录,就要特别注意了。

详情请参阅 Server.Execute 与 #include 交叉使用时路径问题