Бывают случаи, когда Вам необходимо оптимизировать ссылки таким образом, чтобы они лучше индексировались поисковыми системами (в целях SEO и не только). Допустим, когда Вам надо переписать ссылки включающие в себя знаки "?", "&" и "=" в более читабельный вид.
Например Вы хотите переделать ссылку следующего вида:
www.domain.com/default.aspx?category=Title&entry=Name
В такую, более понятную:
www.domain.com/Title/Name
Есть несколько способов добиться Url Rewriting в ASP.NET.
1. Можно воспользоваться тем, что дает Вам стандартрый ASP.NET 2.0, то есть использовать элемент urlMappings. Добавляем следующие строки в файл Web.config:
<system.web>
<urlMappings enabled=«true»>
<add url="~/Home.aspx" mappedUrl="~/Default.aspx?tab=home" />
</urlMappings>
</system.web>* This source code was highlighted with Source Code Highlighter.
Данный способ прост и удобен, но тут все ссылки будут "hardcoded". Воспользовавшись этим способом Ваши возможности будут ограничены. Вы не сможете динамически переписать ссылки.
2. Также существует Open Source модуль под названием UrlRewritingNet.UrlRewrite. UrlRewritingNet это по сути набор DLL файлов. Чтобы работать с ними, Вам необходимо переписать их в директорию /Bin/ вашего проекта.
Далее, добавляем следующие строки в файл Web.config Вашего проекта:
<configuration>
<configSections>
<section name=«urlrewritingnet» requirePermission=«false» type=«UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter»/>
</configSections>
<configuration>
<system.web>
<httpModules>
<add name=«UrlRewriteModule» type=«UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter»/>
</httpModules>
</system.web>* This source code was highlighted with Source Code Highlighter.
и наконец сами правила переписывания ссылок:
<urlrewritingnet rewriteOnlyVirtualUrls=«true» contextItemsPrefix=«QueryString» defaultPage = «default.aspx» xmlns=«www.urlrewriting.net/schemas/config/2006/07» >Как видно из примера, UrlRewritingNet позволяет динамически переписать ссылки при помощи регулярных выражений.
<rewrites>
<add name=«Rule1» virtualUrl="^~/(.*)/Detail(.*)</strong>.aspx" rewriteUrlParameter=«ExcludeFromClientQueryString» destinationUrl="~/Default.aspx?language=$1&id=$2" ignoreCase=«true» />
.
.
.
</rewrites>
</urlrewritingnet>* This source code was highlighted with Source Code Highlighter.
Использовать UrlRewritingNet удобно в случаях, когда у вас нет выделенного хостинга (dedicated hosting), то есть когда у Вас нет возможности переписывать URL на уровне сервера.
О всех возможностях UrlRewritingNet можно почитать более подробно здесь, а скачать сам модуль можно здесь.
3. А самым, на мой взгляд, правильным способом переписывать URL будет по средствам ISAPI Rewrite фильтра. Это модуль для IIS, который принимает стандартные правила написанные для Apache .htaccess mod_rewrite. Его надо установить в качестве ISAPI Filter через IIS на самом сайте.
Пример файла .htaccess для переписывания ссылок:
RewriteEngine on
RewriteRule ^/(.*)/(.*)/(.*).aspx /Default.aspx?Title=$1&Description=$2&Topic=$3
В данном примере мы хотим обращаться к следующей ссылки:
www.domain.com/Default.aspx?Title=A&Description=B&Topic=C
Через такую, более читабельную и короткую:
www.domain.com/A/B/C.aspx
А вот так, допустим, можно побороть пожирание трафика с вашего сайта, заблокировав отображение картинок с других сайтов, которые находятся физически на Вашем сайте:
RewriteEngine on
RewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+
RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]
ISAPI Rewrite переписывает URL на уровне IIS. Здесь Ваши возможности практически неограниченны. Возможности ISAPI Rewrite не ограничиваются только переписыванием ссылок.
Про ISAPI Rewrite фильтр написано более подробно здесь, а скачать бесплатный модуль можно здесь. Разница между бесплатной и платной версиями в том, что в бесплатной версии все правила сохраняются в одном файле и действительный для всех сайтов под IIS. В платной же версии правила можно писать под конкретные сайты.
Полезные статьи на эту тему:
— URL Mapping in ASP.NET 2.0
— Tip/Trick: Url Rewriting with ASP.NET
— A Complete URL Rewriting Solution for ASP.NET 2.0
— URL Rewriting in ASP.NET
P.S.
Это мой первый более или менее серьезный пост на Хабре, поэтому не судите строго.
Буду рад всяческим поправкам в русском языке и не только. :)