2009-05-20 108 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>