Вы абсолютно правы, это правильный алгоритм.
Итак, перефразируя, убедитесь, что:
1) Найдите сайт, которому он соответствует (если вы делаете это на основе имени хоста или привязки (ip, port и т. Д.)).
2) Найдите приложение на сайте, которое соответствует самому длинному подмножеству оставшегося URL.
3) Найдите VirtualDirectory в приложении, которое соответствует самому длинному подмножеству оставшегося URL.
4) Сделайте Path.Combine (vdir.PhysicalPath, «оставшийся URL-адрес с / заменен на \»)
Это физический путь.
Помните, что в настоящее время многие URL-адреса могут быть логичными (в сценариях, таких как MVC или перезапись), поэтому у вас может не быть реального физического пути.