获取asp经典中完整路径的虚拟路径

C. *_*oss 8 server.mappath virtual-path asp-classic

如何在ASP classic中获取完整路径的虚拟路径.请注意,完整路径可能位于虚拟目录下,因此过于简单

virtPath = Replace(fullPath, Server.MapPath("/"), "") 
Run Code Online (Sandbox Code Playgroud)

方法不起作用.

编辑:为了澄清,下面是一个例子

  • 完整的Windows文件路径(已知): \\ MyServer\MyShare\Web\Site\Logs\Test.txt
  • 我的网站有一个名为Logs的虚拟目录,指向\\ MyServer\MyShare\Web\Site\Logs \.
  • 虚拟路径(未知):/ Logs/Text.txt
  • Http路径(未知,需要): http://Site/Logs/Test.txt
  • 代码位于主应用程序的asp页面中,而不是在任何虚拟目录下.它位于与相关文件不同的服务器上.
  • IIS 6.0

    如何从完整文件路径中找到虚拟路径?

sho*_*nik 14

如果有人感兴趣,安东尼琼斯的回答告诉我如何一致地获得应用程序的相对根.因此,如果您在http://example.com上有一个站点,并且在http:// localhost/example上有一个本地开发,则可以使用此函数找到您的root:

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
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样调用它来获取根路径:

ToRootedVirtual("/")
Run Code Online (Sandbox Code Playgroud)

哪个将返回:

  • /在example.com上
  • / example/on localhost/example

您也可以在没有斜线的情况下使用它:

ToRootedVirtual("")
Run Code Online (Sandbox Code Playgroud)


Red*_*ter 0

尽管可能有更好的方法,但我总是通过创建一个配置变量来实现此目的,在该变量中手动指定不属于虚拟路径的根路径。这是因为您不知道该站点是否会以 root 身份部署在根 Web 中的文件夹下,或者部署在虚拟目录中。