如果我理解了这个问题。
假设
完整路径是当前应用程序或子应用程序中的路径。它不是仅限于父应用程序的路径,也不是通向同级应用程序的路径。所需路径是相对于当前应用程序路径的。
方案 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/Root/someApp”
- “/LM/W3SVC/33230916/Root/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