我希望能够将所有ASP Classic包含文件放在Web根目录之外。这确保不能通过URL直接调用包含文件。
实现这一目标的最佳方法是什么?
我知道我可以使用virtual directory来引用web root之外的includes文件夹,但是它是否仍然允许通过URL直接访问该目录?也许我误解了虚拟目录的本质。
答案 0 :(得分:2)
来自this article:
(我自己永远不需要这样做)
解读。创建一个虚拟目录 “在你的默认网站内” 指向你外面的文件' 工作文件夹。在你的代码中 引用那个虚拟目录 指向外面的文件夹/文件 你的正常结构。例如
您的默认网站是本地文件夹 叫做c:\ websites \ example.com。下 example.com,你的所有文件夹和 文件。但是,您想要的文件 一个名为FileServerA的文件服务器 名为D:\ MyWebsiteIncludes的文件夹。 UNC路径是 \ FileServerA \ D $ \ MyWebSiteIncludes或 如果您在文件夹上创建共享, \ FileServerA \ MyWebsiteIncludes On 在Web服务器上,创建一个虚拟的 映射到任一共享的目录 路径。你需要确保 正确的凭据配置为 访问远程服务器上的文件。
答案 1 :(得分:2)
虽然不推荐,但您也可以在IIS中启用“启用父路径”选项,这将允许您通过include指令引用webroot外部的文件,以及允许通过filesystemobject进行访问。但通常不建议这样做,因为它确实存在安全风险。
有关如何执行此操作的说明,请查看Enabling Parent Paths article on MSDN。
我使用经典ASP已经有一段时间了,但一般来说,我只在包含文件中声明子程序和函数,然后从主应用程序代码中调用它们。这有意想不到的副作用,如果有人猜测包含的路径并直接通过他们的浏览器访问文件,它实际上不会做任何事情,因为没有代码被执行。
答案 2 :(得分:0)
我能够检查Diodeus' answer中提到的程序,但它确实有效。
E:\includes\
\include.asp
\another.asp
E:\websites\
\business-website.com\
\config.asp
\default.asp
\personal-website.com\
\config.asp
\default.asp
\whatever-website.com\
\config.asp
\default.asp
business-website.com -> E:\websites\business-website.com\
v. dir /include -> E:\includes\
personal-website.com -> E:\websites\personal-website.com\
v. dir /include -> E:\includes\
whatever-website.com -> E:\websites\whatever-website.com\
v. dir /include -> E:\includes\
注意:虚拟目录未转换为应用程序。
default.asp
Files in current directory:
<!-- #include file="config.asp" -->
Files in current directory (using virtual path):
<!-- #include virtual="/config.asp" -->
Files in include directory:
<!-- #include virtual="/include/include.asp" -->
include.asp
Files in current directory:
<!-- #include file="another.asp" -->
Files in current directory (using virtual path):
<!-- #include virtual="/include/another.asp" -->
Files in root application:
<!-- #include virtual="/config.asp" -->
这使得将所有包含文件合并到一个地方变得更加容易。