Как преобразовать URL-адрес ASP.NET без маршрутизации URL-адресов или перезаписи URL-адресов?

Я использую ASP.NET 2.0 на IIS6, поэтому не могу использовать system.web.routing. Я пробовал несколько рерайтеров URL, но ни один из них не сделал то, что я хотел.

В основном мне нужно преобразовать (прочитать/разобрать, а затем перенаправить) URL-адрес 1 в 2 с минимальной конфигурацией IIS, потому что я не имеют полных полномочий для перенастройки веб-серверов (например, ISAP на IIS6 или установки сторонних расширений/библиотек). И я не могу преобразовать URL в 3, потому что все физические ссылки не работают.

  1. http://www.url.com/abc123
  2. http://www.url.com/default.aspx?code=abc123
  3. http://www.url.com/abc123/default.aspx?code=abc123

Спасибо!


person Jeff    schedule 13.01.2010    source источник


Ответы (3)


Создайте обработчик ошибки 404, например. 404.aspx. На этой странице проанализируйте URL-адрес запроса и извлеките код, используя Request.Path. Затем перенаправьте на default.aspx?code=abc123.

Вы должны иметь возможность установить обработчик 404 (страница не найдена) на 404.aspx для вашего веб-сайта, большинство хостинг-провайдеров разрешают это.

person Pavel Chuchuva    schedule 14.01.2010
comment
Я собирался вручную выполнить синтаксический анализ и перенаправление в Application_Error (global.asax), потому что я не мог избавиться от строки запроса aspxerrorpath, поскольку я не могу зафиксировать значение /abc123 до того, как aspxerrorpath будет выброшен, потому что Request.Path всегда URL-адрес страницы с ошибкой 404. - person Jeff; 14.01.2010
comment
Убедитесь, что вы установили обработчик 404 в IIS, а не в web.config. - person Pavel Chuchuva; 14.01.2010
comment
Вы рекомендуете Application_Error (global.asax), чем 404? Поскольку у меня нет слишком большого контроля над веб-серверами, и у нас есть более 1 веб-сервера, поэтому я предпочитаю мягкий способ. Для утверждения любого изменения настроек IIS требуются недели... - person Jeff; 14.01.2010
comment
Если вы получаете событие Application_Error для URL-адресов без расширения, таких как http://www.url.com/abc123, во что бы то ни стало, используйте его. В противном случае вам нужно настроить IIS для использования вашего обработчика 404. - person Pavel Chuchuva; 15.01.2010
comment
Я настроил свой dev IIS для пересылки 404 на мою страницу 404, но Request.Url и Request.Path показывают путь к странице 404, а Request.UrlReferrer имеет значение null. - person Jeff; 15.01.2010
comment
Я как бы не хочу использовать ApplicationError, если у меня нет другого выбора, потому что я считаю, что преобразование URL-адресов в AppError влияет на производительность. - person Jeff; 15.01.2010
comment
Хорошо, я понял, что мне нужно использовать Request[aspxerrorpath] для чтения пути. Спасибо!!! - person Jeff; 15.01.2010
comment
Получить значение из QueryString настолько очевидно, что я не знаю, о чем я думал... ^_^ - person Jeff; 15.01.2010

Я бы посоветовал вам взглянуть на использование пользовательского преобразования с UrlRewriter.net. По этой ссылке подробно описано, как вы можете сделать это со сборкой Intelligencia.UrlRewriter (около 3/4 пути вниз по странице). Надеюсь, достаточно хорош, чтобы делать то, что вам нужно.

person Kane    schedule 13.01.2010
comment
Я не думаю, что перезапись URL-адреса будет работать, потому что я не хочу, чтобы URL-адрес был перезаписан, мне нужно только прочитать/разобрать URL-адрес, а затем перенаправить. - person Jeff; 14.01.2010

protected void Page_Load(object sender, EventArgs e)
{
    HtmlLink canonicalTag = new HtmlLink();
    canonicalTag.Href = "http://www.url.com/default.aspx";
    canonicalTag.Attributes["rel"] = "canonical";
    Page.Header.Controls.Add(canonicalTag);
}

http://codersbarn.com/post/2009/02/21/ASPNET-SEO-and-the-Canonical-Tag.aspx

person IrishChieftain    schedule 14.01.2010