Почему корень приложения "~" преобразуется в корень сайта "/" в ASP.NET?
У меня есть сайт ASP.NET Web Forms, разработанный под Visual Studio 2012. Есть главная страница с панелью навигации и ссылками на таблицы CSS. Бот указывается с помощью корневого оператора приложения "~"
<asp:PlaceHolder runat="server">
<%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
</asp:PlaceHolder>
...
<li><a runat="server" href="~/Forms/SelectResults.aspx">Generate Table</a></li>
<li><a runat="server" href="~/BrowseDB.aspx">Browse DB</a></li>
При просмотре страницы http://localhost/Forms/SelectResults.aspx
Я вижу, что "~" разрешается по-разному для этих случаев:
<link href="/Content/site.css" rel="stylesheet" type="text/css" />
...
<li><a href="SelectResults.aspx">Generate Table</a></li>
<li><a href="../BrowseDB.aspx">Browse DB</a></li>
Таким образом, путь к CSS является абсолютным, а путь к другим страницам - относительным. При запуске на localhost все работает нормально. Но после размещения моего сайта на сервере у него есть адрес http://MyDomain/MySite/
, поэтому он не находится в корне домена. И из-за абсолютных путей, CSS-файлы не могут быть загружены! Навигация работает нормально, но все стили разрушены.
Почему оператор "~" не работает в Styles.Render
Директива? Оба фрагмента кода были сгенерированы стандартным шаблоном веб-сайта ASP.NET, я ничего не изменил.
Сайт разработан под Visual Studio 2012, .NET Framework 4.5. Мои спецификации сервера:
- Windows 7 x64
- IIS 7.5
- Платформа приложений для веб-сайта
1 ответ
Проблема была вызвана нашим прокси-сервером, который на самом деле http://MyDomain/MySite/
в http://InternalDomain:InternalPort/
, И для этого корень приложения внутреннего домена фактически был корнем сайта.