2009-05-20 147 views
7

如何获取ASP classic中完整路径的虚拟路径。请注意,完整路径可能位于虚拟目录下,因此简化方法将不起作用。因此,该方法不起作用。在asp classic中获取完整路径的虚拟路径

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

  • 完整的Windows文件路径(已知): \\的MyServer \ MyShare中\网络\网站\日志\ Test.txt的
  • 我的网站有一个虚拟目录 叫做日志那指向\\ MyServer \ MyShare \ Web \ Site \ Logs \
  • 虚拟路径(未知):/Logs/Text.txt
  • HTTP路径(未知,需要): http://Site/Logs/Test.txt
  • 的代码是在ASP页面中的主要应用,而不是在任何虚拟目录。它位于与该文件不同的服务器上。
  • IIS 6.0

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

+0

您能否澄清一件事,该代码在哪里运行?在你的应用程序的ASP页面? – AnthonyWJones 2009-05-21 13:14:20

+0

还有什么IIS版本? IIS6? – AnthonyWJones 2009-05-21 13:15:32

回答

0

虽然有可能是一个更好的办法,我总是通过创建一个配置变量,其中我手动指定不是虚拟路径的一部分的根路径这样做。这是因为您不知道该网站是以root用户身份部署在根网站的文件夹下还是虚拟目录中。

0

好,我的答案是不超过OrbMan的更好...

我都以这样的方式,每一个包括相对于组织我的应用程序...

代替\ MYAPP \ LIB \ somefile.asp我用.. \ LIB \ somefile.asp

在其他情况下,我只是做Orbman说...

4

如果我理解这个问题。

假设

的完整路径是与当前应用程序或子应用程序的路径。这不是一个限于父母的路径,也不是通往兄弟应用程序的路径。所需的路径是相对于当前的应用程序路径。

方案1条

的路径如

“/ someApp/someFolder/someSubFolder /文件。EXT”

应该把它解析为: -

“〜/ someFolder/someSubFolder/file.ext”

(尽管〜/符号是不是ASP经典的理解)

方案2

“/someApp/someSubApp/SomeSubFolder/file.ext”

你仍然想: -

“〜/ someFolder/someSubFolder/file.ext”

方案3

该应用程序是网站的根应用: -

“/ someFolder/someSubFolder /文件。 EXT”

仍然会成为

“〜/ someFolder/someSubFolder.file.ext”

解决方案

解决这一点的关键是: -

Dim sAppMetaPath : sAppMetaPath = Request.ServerVariables("APPL_MD_PATH") 

对于上述设定的情况下,这将导致类似: -

  1. “/ LM/W3SVC/33230916/Root/someApp“
  2. ”/ LM/W3SVC/33230916/Root/someApp/someSubApp“
  3. “/ LM/W3SVC/33230916 /根”

而且

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 
+0

看起来不错,我会试试看。 喜欢你的评论Jon的博客。 – 2009-05-21 12:09:14

14

如果有人感兴趣,Anthony Jones的答案向我展示了如何一致地获取应用程序的相关根。所以,如果你有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 

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

ToRootedVirtual("/") 

这将返回:

  • /example.com上
  • /例子/本地主机/例如

您也可以使用它没有斜杠:

ToRootedVirtual("") 
0

这里是你如何解决根relatie寻路中通过ASP HTML,所以你的网站可以被移植到不同的主机目录。

这个小片段会产生正确的前缀设置你的网址:

Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6) 

可以在链接中使用此,IMGS,超链接等等如下:

<link href="<%= Mid(Request.ServerVariables("APPL_MD_PATH"),Len(Request.ServerVariables("INSTANCE_META_PATH"))+6) %>/assets/css/master.css" rel="stylesheet" type="text/css" /> 

所以,代码的路径为根相对(以/开头),然后将该代码段放在引号内的第一个斜杠前面:

0

服务器的虚拟路径是:

<%Response.Write "http://" & Request.ServerVariables("server_name") & 
left(Request.ServerVariables("SCRIPT_NAME"),InStrRev(Request.ServerVariables("SCRIPT_NAME"),"/")) %> 
</p>