如何在ASP classic中获取完整路径的虚拟路径。请注意,完整路径可能位于虚拟目录下,因此简单
virtPath = Replace(fullPath, Server.MapPath("/"), "")
方法不起作用。
编辑:为了澄清,下面是一个例子
IIS 6.0
如何从完整文件路径中找到虚拟路径?
答案 0 :(得分:14)
如果有人感兴趣,安东尼琼斯的回答告诉我如何一致地获得应用程序的相对根。因此,如果您的网站位于http://example.com且本地开发等效于http://localhost/example,则可以使用此功能找到您的根:
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("/")
将返回:
您也可以使用它而不使用斜杠:
ToRootedVirtual("")
答案 1 :(得分:4)
如果我理解了这个问题。
<强>假设强>
完整路径是当前应用程序或子应用程序中的路径。它不是限制父级的路径,也不是进入兄弟应用程序的路径。所需路径相对于当前应用程序路径。
情景1
诸如
之类的路径“/ someApp / someFolder / someSubFolder / file.ext”
应将其解析为: -
“〜/ someFolder / someSubFolder / file.ext”
(尽管〜/ notation不是ASP经典理解的东西)。
场景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")
对于上述场景,这将导致类似: -
另外
Dim sInstanceMetaPath: sInstanceMetaPath = Request.ServerVariables("INSTANCE_META_PATH")
将在所有场景中返回
“/ LM / SVC / 33230916”
通过一些数学减少,我们可以得到函数: -
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
答案 2 :(得分:0)
虽然可能有更好的方法,但我总是通过创建一个配置变量来实现这一点,我手动指定不属于虚拟路径的根路径。这是因为您不知道该站点是以root用户身份,在根Web中的文件夹下还是在虚拟目录中部署。
答案 3 :(得分:0)
我组织了我的应用程序,每个包含都是相对的......
即
而不是\ myapp \ lib \ somefile.asp我使用.. \ lib \ somefile.asp
在其他情况下,我只是做奥尔布曼所说的......
答案 4 :(得分:0)
以下是如何通过ASP解决html中的root-relatie路径,以便您的站点可以移植到不同的托管目录。
这个小小节将产生正确的前缀来设置您的网址:
Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6)
您可以在LINK,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" />
所以,将您的路径编码为root-relative(以/开头),然后将此代码段放在引号内的第一个斜杠前面:
答案 5 :(得分:0)
服务器的虚拟路径为:
<%Response.Write "http://" & Request.ServerVariables("server_name") &
left(Request.ServerVariables("SCRIPT_NAME"),InStrRev(Request.ServerVariables("SCRIPT_NAME"),"/")) %>
</p>