Asp classic 获取asp classic中完整路径的虚拟路径
如何在ASP classic中获取完整路径的虚拟路径。请注意,完整路径可能位于虚拟目录下,因此Asp classic 获取asp classic中完整路径的虚拟路径,asp-classic,server.mappath,virtual-path,Asp Classic,Server.mappath,Virtual Path,如何在ASP classic中获取完整路径的虚拟路径。请注意,完整路径可能位于虚拟目录下,因此 virtPath = Replace(fullPath, Server.MapPath("/"), "") 这种方法行不通 编辑:为了澄清,下面是一个示例 完整的Windows文件路径(已知): \\MyServer\MyShare\Web\Site\Logs\Test.txt 我的网站有一个虚拟目录 调用了指向\\MyServer\MyShare\Web\Site\Logs\的日志 虚拟路径(
virtPath = Replace(fullPath, Server.MapPath("/"), "")
这种方法行不通
编辑:为了澄清,下面是一个示例
- 完整的Windows文件路径(已知): \\MyServer\MyShare\Web\Site\Logs\Test.txt
- 我的网站有一个虚拟目录 调用了指向\\MyServer\MyShare\Web\Site\Logs\的日志
- 虚拟路径(未知):/Logs/Text.txt
- Http路径(未知,需要):
- 代码位于主应用程序的asp页面中,而不是任何虚拟目录下。它位于与相关文件不同的服务器上
- IIS 6.0 如何从完整文件路径中找到虚拟路径
在其他情况下,如果我理解了这个问题,我就照奥尔曼说的去做。 假设 完整路径是当前应用程序或子应用程序中具有的路径。它不是仅限于父应用程序的路径,也不是进入同级应用程序的路径。所需路径相对于当前应用程序路径 情景1 路径,如 “/someApp/someFolder/someSubFolder/file.ext” 应决心:- “~/someFolder/someSubFolder/file.ext” (尽管~/符号不是ASP classic所能理解的) 场景2 “/someApp/someSubApp/SomeSubFolder/file.ext” 你仍然想要:- “~/someFolder/someSubFolder/file.ext” 场景3 该应用程序是站点的根应用程序:- “/someFolder/someSubFolder/file.ext” 仍将成为 “~/someFolder/someSubFolder.file.ext” 解决方案 解决这一问题的关键是:-
Dim sAppMetaPath : sAppMetaPath = Request.ServerVariables("APPL_MD_PATH")
对于上述场景集,这将导致如下结果:-
Function ToAppRelative(virtualPath)
Dim sAppMetaPath : sAppMetaPath = Request.ServerVariables("APPL_MD_PATH")
Dim sInstanceMetaPath: sInstanceMetaPath = Request.ServerVariables("INSTANCE_META_PATH")
ToAppRelative = "~/" & Mid(virtualPath, Len(sAppMetaPath) - Len(sInstanceMetaPath) - 3)
End Function
如果有人感兴趣,Anthony Jones的回答告诉了我如何一致地获取应用程序的相对根。因此,如果您有一个位于的站点和一个与之相当的本地开发站点,您可以通过以下功能找到您的根目录:
Function ToRootedVirtual(relativePath)
Dim applicationMetaPath : applicationMetaPath = Request.ServerVariables("APPL_MD_PATH")
Dim instanceMetaPath : instanceMetaPath = Request.ServerVariables("INSTANCE_META_PATH")
Dim rootPath : rootPath = Mid(applicationMetaPath, Len(instanceMetaPath) + Len("/ROOT/"))
ToRootedVirtual = rootPath + relativePath
End Function
然后可以这样调用它以获取根路径:
ToRootedVirtual("/")
将返回:
- /在example.com上
- /示例/on localhost/example
ToRootedVirtual("")
下面是如何通过ASP解决html中的根关系路径问题,以便您的站点可以移植到不同的托管目录 这个小片段将生成正确的前缀来设置URL:
Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6)
您可以在链接、IMG、超链接等中使用此选项,如下所示:
<link href="<%= Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6) %>/assets/css/master.css" rel="stylesheet" type="text/css" />
因此,将路径编码为根相对路径(以/开头),然后将此代码段放在第一个斜杠前面的引号内:服务器的虚拟路径是:
不太正确,很遗憾,请参见编辑以获得澄清。您能否再澄清一件事,这段代码在哪里运行?在应用程序的ASP页面中?还有什么IIS版本?IIS6?我真的不喜欢经典的asp,因为大多数现代网络语言都解决了这些小问题,但人们仍然想要经典的asp网站。。。哦,人性。但这很有魅力,谢谢。当然,这种方法在global.asa中不起作用,因为您无法访问请求对象。这是解决我的类似问题的一个很好的方法!
<link href="<%= Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6) %>/assets/css/master.css" rel="stylesheet" type="text/css" />
<%Response.Write "http://" & Request.ServerVariables("server_name") &
left(Request.ServerVariables("SCRIPT_NAME"),InStrRev(Request.ServerVariables("SCRIPT_NAME"),"/")) %>
</p>