私が質問を理解した場合。
予測
フル パスは、現在のアプリケーションまたは子アプリケーション内のパスです。親に限定されたパスでも、兄弟アプリケーションへのパスでもありません。目的のパスは、現在のアプリケーション パスに対する相対パスです。
シナリオ 1
次のようなパス
"/someApp/someFolder/someSubFolder/file.ext"
それを解決する必要があります:-
"~/someFolder/someSubFolder/file.ext"
(ただし ~/ 表記は 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")
上記の一連のシナリオでは、次のような結果になります。
- "/LM/W3SVC/33230916/ルート/someApp"
- "/LM/W3SVC/33230916/ルート/someApp/someSubApp"
- "/LM/W3SVC/33230916/ルート"
また
Dim sInstanceMetaPath: sInstanceMetaPath = Request.ServerVariables("INSTANCE_META_PATH")
すべてのシナリオで戻ります
"/LM/W3SVC/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