URL Rewriting. Что это и зачем?
Основные цели для использования URL Rewriting две:
1. Обеспечить лучшую индексацию в поисковых машинах. URL Rewriting позволяет включать основные слова прямо в URL, да и вообще, прямые ссылки приносят большие баллы в поисковых системах.
2. Сделать пути к статьям независимыми от структуры сайта (чтобы в случае изменения структуры вашего сайта, ссылки из «избранного» оставались «живыми»).
3. Сделать пути легкозапоминаемыми для людей.
Ну, вот пример. Мы пишем сайт какого-то журнала, и страницы в нем организованы по категориям (about, press, people, subscribe).
У нас есть страница “Show.aspx”, которая берет название категории из Querystring и делает выборку из базы. Запросы к странице Show.aspx сейчас выглядят так:
http://www.journal.ru/show.aspx?show=about
http://www.journal.ru/show.aspx?show=press
http://www.journal.ru/show.aspx?show=people
http://www.journal.ru/show.aspx?show=subscribe
Нас это не устраивает, и мы хотим изменить приложение так, чтобы адрес каждой страницы выглядел уникальным для поисковых машин.
Используем HttpModule для URL Rewriting.
Вот как будут выглядеть наши пути после перезаписи:
http://www.journal.ru/About.aspx
http://www.hournal.ru/Press.aspx
http://www.hournal.ru/People.aspx
http://www.hournal.ru/Subscribe.aspx
Всё это безобразие выглядит как 4 разных страницы на сайте (и очень радует поисковые сервера!), но на самом деле, это ссылки на Show.aspx. Используя метод HttpContext.RewritePath(), мы можем динамически переписывать входящие URL чтобы они обращались к Show.aspx, которая принимает аргументы из Querystring. Для этого, можно использовать событие в Global.asax:
void Application_BeginRequest(object sender, EventArgs e) {
string fullOrigionalpath = Request.Url.ToString();
if (fullOrigionalpath.Contains("/About.aspx")) {
Context.RewritePath("/Show.aspx?show=about");
}
else if (fullOrigionalpath.Contains("/Press.aspx")) {
Context.RewritePath("/Show.aspx?show=press");
}
}
Минусы этого способа: обычно бывает лень это писать, да легко можно запутаться и сделать ошибки. За вас уже все придумано и написано, можно просто воспользоваться одним из готовых компонентов:
UrlRewriter.net
UrlRewriting.net
Эти модули позволяют прописать вам в web.config правила перезаписи адресов. Например, используя UrlRewriter.Net, нужно записать в web.config привязку четырех URL к файлу Show.aspx:
HttpModule URL Rewriter-ы еще позволяют воспользоваться регулярными выражениями, чтобы не заставлять разработчика добавлять в web.config вообще все динамические ссылки! ))) По-этому можно переписать правила немного иначе, так, чтобы любой адрес /[category-name].aspx работал через Show.aspx:
Это делает наш код очень гибким. Я думаю не нужно объяснять, для чего это нужно. Все очень легко и просто, а главное, никакого лишнего гемора.
Этот способ я использовал на www.kazved.ru, можете посмотреть, как это работает там.
В Apache+PHP для этого используется mod_rewrite.
Меня зовут Адель Шигабутдинов, этот блог я использую для записок самому себе. 
3dmax
/ 10.03.2008Приветствую! Сейчас изучаю библиотеку UrlRewritingNet.. все отлично, вот только у меня возник такой вопрос, можно ли с помощью этогй библиотеки преобразовавать ссылки в коде на стадии построения страницы?
Не хочу сильно менять существующий код, куда лучше написать несколько регулярных выражений и преобразовывать уже готовые ссылки при помощи одного метода.
DrFaust
/ 11.03.2008Честноговоря в работу этого компонента не вникал, когда мне было нужно, просто поменял в коде генерацию ссылок с "page.aspx?id="+int на "/page/"+int+".aspx" :-)
3dmax
/ 11.03.2008:) уже разобрался :)).. у меня не получалось из-за того, что не совсем корректно унаследовал класс от RewritingRole. Все оказалось очень просто.(как и всегда.. порой так лень думать :))) )