Компиляция главной страницы и абсолютные URL - PullRequest
1 голос
/ 01 апреля 2009

ОБНОВЛЕНО 03/04/09

В ответ на некоторые комментарии пример с главной страницы выглядит следующим образом. Это не элемент управления asp.net, это жестко заданный HTML

<a href="http://www.MYDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

Отображается на рабочем сервере как

<a href="http://www.NEWDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

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

ОБНОВЛЕНО 02/04/09

Все URL-адреса являются абсолютными в том смысле, что они начинаются http: //

Я не думаю, что это может быть проблемой браузера, поскольку реальный обработанный исходный код (просмотренный через источник просмотра) был изменен. Проверено в IE7 / 8 и Firefox 3 и свидетельствует о том же поведении.

Оригинальный вопрос

У меня есть приложение ASP.Net 2.0, в котором есть несколько главных страниц. По сути, это макет, похожий на наш основной веб-сайт, но поскольку он работает на другом сервере, все URL-адреса пунктов меню и т. Д. Получают абсолютные URL-адреса нашего основного сайта.

Это прекрасно работает на моей машине для разработки, но на рабочем сервере все абсолютные URL-адреса меняются во время выполнения, но при щелчке они остаются на тех же страницах.

Это проблема DNS? Делает ли ASP.Net какое-то DNS-разрешение URL-адресов при объединении главной страницы и контента? Если это так, то почему это не влияет на мой локальный компьютер, они находятся в одном домене.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2009

Нет, это не проблема DNS, и ASP.net не выполняет никакого разрешения DNS. Это вся ответственность браузера, в котором вы просматриваете страницу.

Однако есть несколько обстоятельств, которые могут привести к тому, что в разметке страницы будут использоваться непоследовательные URL-адреса, которые могут интерпретироваться браузером клиента по-разному.

Браузеры всегда будут интерпретировать URL-адрес, начинающийся с «http://", одним и тем же образом - это абсолютный URL-адрес, поэтому назначение всегда будет разрешать одно и то же. Убедитесь, что начинаются все ваши URL-адреса вашего основного сайта» http://".

URL, начинающиеся с "www." (никакие http://) не будут рассматриваться как относительные URL-адреса - т. е. если страница, содержащая URL-адрес, имеет значение http://www.google.com,, по сути, вы запрашиваете http://www.google.com/YourUrl. Вы обнаружите, что это почти наверняка не поведение, которое вы ищете.

URL, начинающиеся с косой черты (/), будут считаться абсолютными в текущем домене. Например, «/ Tools» в Google приведет к запросу «http://www.google.com/Tools".. Если косая черта отсутствует, браузер будет обрабатывать URL-адрес как относящийся к просматриваемой в данный момент странице (т. Е. URL-адрес« Tools »). msgstr "при просмотре страницы в папке" en "возникает запрос к" en / Tools ".

Я думаю, что именно здесь возникают ваши проблемы. Для согласованного поведения я считаю хорошим правилом убедиться, что все URL начинаются с косой черты. Если вы хотите убедиться, что все ваши гиперссылки, сгенерированные вашим ASP-кодом, верны, используйте тильду (которую ASP заменит на путь к корневой папке приложения):

<asp:Hyperlink id="Test1" runat="server" NavigateUrl="~/Tools/Default.aspx">Tools</asp:Hyperlink>

Таким образом, не имеет значения, где находится ваша страница в структуре вашего сайта, используете ли вы Cassini, веб-сайт в IIS или виртуальный каталог в IIS - URL всегда будет преобразовываться в правильный адрес.

Если вы хотите вывести URL, который не является свойством серверного элемента управления, используйте метод ResolveUrl:

<a href="<%= ResolveUrl("~/Tools/Default.aspx")%>">Tools</a>

Надеюсь, это поможет.

0 голосов
/ 01 апреля 2009

Под "абсолютным" я предполагаю, что вы имеете в виду, что они начинаются с "/", а не с имени папки?

Если вы используете элемент управления ASP.NET hyperlink , то они, как правило, изменяются для запуска в корне приложения.

Редактировать для комментария

Можете ли вы дать нам пример того, как меняются URL-адреса? то есть с http://www.example.com/somepage.aspx до http://www.example.com/trackingpage.aspx?somequerysting - или домен меняется? или что-то еще?

Вы говорите: «Они все равно оказываются на тех же страницах» - так ясно, что все работает. Есть ли у вас какие-либо HttpHandlers, зарегистрированные в web.config на ваших производственных серверах, которые могли бы модифицировать URL-адреса для вас, чтобы они все проходили через какую-то систему регистрации? То есть получение ответа от сервера, обработка результирующего HTML, изменение всех ссылок - происходит ли это с помощью простых тегов привязки, а также элементов управления Hyperlink?

Используете ли вы настраиваемую базовую страницу, выполняющую дополнительные действия в PreRender или Render, которая отличается в производственной среде от вашей машины разработчика, которая меняет URL-адреса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...