Если я понял вопрос.
Успение
Полный путь - это путь в текущем или дочернем приложении. Это не путь, ограниченный родителем, ни путь в одноуровневое приложение. Требуемый путь относительно текущего пути приложения.
Сценарий 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 / Root"
Также
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