Чтобы перефразировать вашу проблему, у вас есть сайт, который должен работать в двух разных конфигурациях:
http://servername/mypage.htm
и http://servername/SubSite/mypage.htm
Вторая конфигурация может представлять собой тестовый сайт (возможно, даже localhost на компьютере разработчика).
Все пути к изображениям, ссылкам, таблицам стилей должны работать с относительной адресацией в любом развертывании.
Таким образом, установка src = "/ resources / mypic.jpg" для изображения не сможет выполнить тест на примере SubSite (называемый виртуальным каталогом или приложением в IIS), потому что / скажет ему посмотреть http://servername/resources
вместо http://servername/SubSite/resources
и поэтому он не работает.
Моя позиция для моей команды разработчиков - ВСЕГДА использовать относительный путь к документу.
Таким образом, в базовом примере mypage.htm, которыйнаходится в корне дерева веб-сайта (независимо от того, где он находится в файловой системе или на веб-сервере), вы должны установить src = "./ resources / mypic.jpg" для изображения * По сути, помните, что вHTML, когда вы видите "./" этозначит с этой с.Если вам нужно перейти в каталог (скажем, у вас есть другая страница в ~ / Reports / myreport.htm, на которой также нужно показать это изображение, вы должны установить источник тега изображения на этой странице как src = "../ resources/mypic.jpg ", что означает перейти на один уровень выше.
Обратите внимание, что я сделал что-то подлое. В ASP.NET ~ / означает корень веб-сайта, независимо от того, где он находится. Яиспользуя его в качестве краткого обозначения для обозначения корня сайта. Хотя в ASP.NET любой серверный элемент управления может фактически использовать URL с ~ / перед ним, и он будет правильно преобразовывать его в правильный путь.
Я остановлюсь на еще одном важном моменте, который я только что изучил сегодня, при исследовании других частей этой проблемы: в файле CSS, если вы используете относительные к документу пути для указания на изображения и т. Д., Этот путь относится к файлу CSS.Это хорошо, потому что CSS-файлы редко меняют положение относительно файлов изображений. Однако то, что называется CSS-файлом, действительно перемещается, что подводит меня к следующему пункту.
WhЯ уже объяснил, что отлично работает с основными веб-страницами и делает их очень переносимыми.Если у вас есть несколько страниц в разных каталогах со ссылками на код или элементы управления, которые генерируют HTML-ссылки на CSS, изображения и т. Д., Вам также необходимо исправить эти пути.
По сути, вам нужно изменить эти URL-адреса (обычнов коде или элементах управления, которые вы написали), чтобы иметь ./ или ../, необходимые для доступа к ресурсу, который вы имели в виду.
В ASP вы можете использовать VBscript для использования Server.MapPath ("/ resources /mypic.jpg "), чтобы получить нужный URL-адрес относительно корня сайта.
В ASP.NET вы можете использовать Page.MapPath (" ~ / resources / mypic.jpg "), чтобы получить правильныйURL, который вам нужен.
Я также написал функции для генерации только правильного ./ или ../ разреза, который мне нужен в .NET, следующим образом:
public static string GetDotDotSlashesToRoot(string Path, bool IncludeTrailingSlash) {
System.Text.StringBuilder result = new System.Text.StringBuilder();
Path = Path.Replace("\\", "/");
Path = Path.Replace("~", string.Empty);
if (Path.Length > 0 && Path[0] == '/') Path = Path.Substring(1);
string slashless = Path.Replace("/", "");
for (int i = 0; i < Path.Length - slashless.Length; i++) {
result.Append("../");
}
if (!IncludeTrailingSlash && result.Length > 0) result = result.Remove(result.Length - 1, 1);
return result.ToString();
}
Вы можете запустить это через converter.telerik.com для преобразования в VB.net, если это необходимо.Я настроил свои мастер-страницы для показа глобальной переменной javascript JSPATHTOSITEROOT, используя эту функцию, чтобы я мог также префиксировать любые пути, которые мне нужны через JS.
Для PHP я не затрагивал это некоторое время, поэтому всеможет дать несколько указателей на другой код, который я опубликовал, чтобы решить эту проблему аналогично: http://us2.php.net/manual/en/function.dirname.php#91208
Эта ссылка показывает, как заставить PHP включать в себя работу, как в C / C ++, включая вложение, но вы можете использовать тот же приемчтобы исправить ваши пути и для html.
В заключение я хочу сказать, что если кто-нибудь передаст вам проект с путями для изображений и css, которые начинаются с "/", они не пройдут тест.Код не является переносимым.Хороший веб-разработчик в 21-м веке знает, что сайт может быть развернут в корне сервера или в качестве подсайта по разным причинам и соответствующим образом.