Относительный путь не работает при развертывании веб-сайта - PullRequest
4 голосов
/ 09 марта 2010

У меня есть веб-сайт, который имеет относительный путь к таблице стилей, которая выглядит так: "/stylesheets/main.css". Теперь это работает нормально, когда я запускаю сайт в Visual Studio. Но когда я развертываю сайт на нашем Windows Server 2003, путь перестает работать. Если я вернусь к коду и изменим путь с "/stylesheets/main.css" на "stylesheets / main.css", сайт отлично работает на сервере. У меня есть другой веб-сайт на другом сервере, который использует тот же стиль пути ("/stylesheets/main.css") и таблицу стилей и работает без проблем. Я действительно не хочу менять все пути, и даже не уверен, если это проблема с кодом или сервером. Любая помощь или идеи будут великолепны. Спасибо.

Ответы [ 6 ]

10 голосов
/ 09 марта 2010

Развернут ли сайт в корне домена? Если сайт на

http://example.com/somefolder/

тогда путь /stylesheet/main.css будет интерпретироваться как

http://example.com/stylesheet/main.css

вместо

http://example.com/somefolder/stylesheet/main.css

Как указано @Kit, вы можете обойти это, решив путь к папке вашего приложения. Я часто делал это в ASP.NET следующим образом:

<link rel="stylesheet" type="text/xss" href="<%= ResolveUrl("~/stylesheet/main.css") %>"/>

Если проблема не в этом, вам придется немного подробнее рассказать.

3 голосов
/ 09 марта 2010

В ASP.NET много раз вам нужно будет использовать тильду (~), чтобы получить корневой каталог приложения , чтобы ваши пути выглядели как ~/stylesheets/main.css

Когда вы указываете путь, начинающийся с /, вы указываете корневой каталог server , поэтому если ваш сайт находится в виртуальном каталоге, он не будет учитываться, но если сайт размещенный как сайт по умолчанию, путь будет квалифицирован:

Пример: сервер с именем foo.net с сайтом, размещенным в виртуальном каталоге с именем app /stylesheet будет переводиться на foo.net/stylesheet , а не foo.net/app/stylesheet

0 голосов
/ 14 июля 2015

Я знаю, что это старый поток, но для будущих читателей, я хотел бы добавить, что я заметил, что иногда для создания виртуальных путей работы обязательно удалить часть runat = "server" из головы и при перетаскивании любой файл на странице, принадлежащий к основной папке, необходимо удалить «~» или «...» из пути. как то так:

    <!DOCTYPE html>

<html>
<head>
 <script src="javascript/Red/jquery.min.js"></script>
</head>
0 голосов
/ 11 марта 2010

При использовании абсолютного пути (например, /images/cool_image.gif ') корневая папка является корневой папкой приложения, установленной IIS.

Точно так же, если вы используете проект Visual Studio ASP .NET Web Application , корень вашего приложения устанавливается при настройке веб-приложения в элементе управления IIS или веб-хостинга. панель.

Если вы используете проект Visual Studio ASP .NET Web Site , то приложение компилируется автоматически «на лету», и корень, вероятно, является общей корневой папкой IIS, поскольку приложение не нужно быть явно настроенным в IIS. Это вряд ли совпадает с фактическим корнем вашего приложения, и по этой причине в проектах «Веб-сайт» следует избегать таких абсолютных путей.

Чтобы обсудить Visual Studio «Веб-сайт» и «Веб-приложение», зайдите в Google - это горячая тема.

Ben

0 голосов
/ 09 марта 2010

URL-адрес формы

/path_preceded_by_a_slash

означает , а не относительный путь ... это абсолютный путь, указывающий, что поиск пути должен начинаться с DocumentRoot, а не каталога, в котором содержится запрашивающий документ.

Возможно, это твоя проблема. Вам следует использовать относительные пути, но вы делаете это неправильно.

0 голосов
/ 09 марта 2010

Было бы лучше не использовать относительный путь, а вместо этого использовать полный путь относительно сервера. Вы можете сделать это, обработав тег вашего документа на сервере. Итак, как-то так:

<head runat="server">
  <link href="~/stylesheet/main.css" type="text/css" rel="stylesheet" />
</head>

Тильда (~) означает, что вы находитесь в корневом каталоге веб-сайта. Это работает потому, что вы обрабатываете голову на сервере. Обратите внимание, что это будет работать для любого другого тега, который также обрабатывается на сервере.

...