преобразование URL-адресов в другие URL-адреса для целей разработки - PullRequest
0 голосов
/ 31 мая 2011

Я работаю со страницами asp и asp.net вместе. Я хотел разместить приложение в своем локальном iis (v5.1), но позже узнал, что iisexpress соответствует моим потребностям. Но независимо от того, использую ли я iis 5.1 или iis express, у меня возникает проблема.

Страница asp, с которой я работаю, относится к статическим ресурсам (css, javascript и т. Д.), Которые находятся в другом виртуальном каталоге. Например, Включение файла CSS будет выглядеть следующим образом.

<link rel="stylesheet" href="/common/include/style/css.css"/>

Если предполагается, что такая вещь запускается из тестовой среды, то приведенный выше URL-адрес разрешит:

http://testing/common/include/style/css.css

В отличие от моего основного приложения. Это будет выглядеть примерно так:

http://testing/myapp/default.aspx

Теперь, если я запускаю iisexpress в скажем порту 8082, и появляется входящий запрос, такой как:

http://localhost:8082/common/inlcude/style/css.css

ошибка 404. Можно ли дать команду iss или iis express разрешить такой URL (начинающийся с /common/...), чтобы сказать http://testing/common/...

Обновление (31 мая 2011 г., 19.04 IST):

Я провел некоторое исследование о том, что такое перезапись URL, и из примеров я пришел к пониманию нескольких вещей. Я не уверен, что я хочу переписать URL, по сути. Снова взяв аналогию с iisexpress, я знаю, что будет входящий запрос uri вроде:

http://localhost:8082/common/inlcude/style/css.css

Но я хочу, чтобы это на самом деле служило следующему uri:

http://testing/common/include/style/css.css

Прежний uri не существует в папке, которую я виртуализировал с помощью iisexpress.

Нужно ли переписывать URL здесь?

Кроме того, в ASP я включаю строки вроде:

<!-- #include virtual="/common/include/classes/utils.asp" -->

Даже эти вещи должны быть разрешены с соответствующими им http://testing/... аналогами.

ps: я делаю все это iis 5.1

1 Ответ

0 голосов
/ 31 мая 2011

В ASP.NET 2.0 и выше вы можете использовать оператор тильды (~), который используется для указания места вашего приложения. Например:

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />

Будет выдан относительный URL:

<link href="Styles/Site.css" rel="stylesheet" type="text/css" />

Это прекрасно работает для страниц ASP.NET.

Классические страницы ASP и статические HTML - это разные истории, и необходимо будет использовать один или несколько из следующих механизмов:

  1. Сделать все относительно. Если у вас есть страница или ASP-скрипт в корне сайта, вместо указания /common/include/... укажите common/include/.... Если у вас есть страница или ASP-скрипт в подпапке, вы будете ссылаться на свой CSS с помощью ../common/include/..., то есть родительских путей. Чем глубже структура папок, тем больше у вас родительских путей ../, поэтому управление этими относительными путями может привести к путанице. Кроме того, хотя в наши дни это не распространено, некоторые совместно используемые серверы запрещают родительские пути.

  2. Префикс ваших путей CSS с переменной, содержащей префикс пути. Например:

    <link rel="stylesheet" href="<%=Session("RootPath")%>/common/include/style/css.css"/>
    

    В производственном процессе вы бы глобально установили значение сеанса RootPath на /MyApp, но для тестирования оставьте пустую строку. Вы можете сделать это в Session_OnStart в вашем global.asa. Вы также можете использовать значение широкого приложения Application("RootPath") Это будет работать только для страниц ASP.

  3. Перезапись URL - если у вас есть статические страницы HTML, то на помощь может прийти перезапись URL. Вы бы переписали абсолютные URL-адреса, которые работают на вашем ПК разработчика, по пути, используемому на рабочем сервере. Таким образом, каждый раз, когда вы видите href="/common/..., вы переписываете href="/myapp/common/.... IIS6 не поддерживает переписывание из коробки, вам понадобится сторонний инструмент, такой как Iconics IRF или ISAPI_Rewrite3 , разработанный HeliconTech. IIS 7.x поддерживает перезапись URL через Модуль перезаписи URL 2.0 .

...