
Если вы попали на эту страницу с поискового сервера - вам не нужно объяснять зачения этих слов.
Cтатья поможет вам упорядочить картину "URL rewriting, что и как я могу сделать", а так же понять,
что находится в арсенале разработчика ASP.NET, плюсы и минусы основных решений.
Если же вы зашли сюда по старой памяти, давайте взглянем на слова "SEO, user and serach engine friendly urls,
improving the search relevancy, protect site content". Если выражение вашего лица стало хоть чуть более заинтересованным -
наливаем кофе, устраиваемся поудобнее и читаем дальше.
Для того, чтобы уйти от общих фраз, давайте сразу представим себе реальный пример: скажем, владелец домена news.ru
заказал у вас разработку новостного портала. И как у нас водится - это должен быть портал всех порталов, убийца остальных
новостных ресурсов и т.д. Он будет содержать десятки тысяч новостей, разбитых по категориям и темам и, естественно, должен
быть вооружен последними достижениями SEO, чтобы максимально ускорить вожделенный и столь горячо обсуждаемый процесс "монетаризации".
Что нам может понадобится?
-
Вынести категории новостей в отдельные поддомены, например fashion.news.ru, sport.news.ru, movies.news.ru и т.п.
-
Использовать user friendly (т.е. интуитивно понятные пользователю) urls, например:
- http://sport.news.ru/ukraine/dinamo-kiev/2007 - новости о киевском клубе "Динамо" за 2007 год
- http://moviesnews.ru/comedy/france/top - самые популярные новости о французских комедиях
-
Использовать статические urls, включающие ключевые слова вместо динамических страниц с параметрами, например:
http://sex.news.ru/topmodels/dima-bilan-with-famous-top-model
вместо
http://sex.news.ru/list.aspx?rubric=topmodels&articleId=5624
Тут разница в прямом смысле бросается в глаза.
-
Если на какую-то страницу можно попасть, используя несколько url - оставить только один и делать на него редиректы
со всех остальных вариантов (чтобы не распылять рейтинг). Например, если у нас есть главная страница поддомена
sport.news.ru "main.aspx", оставить ей url http://sport.news.ru, делая 301 (permanent) редирект с остальных вариантов, типа:
http://sport.news.ru/main.aspx
http://www.sport.news.ru
http://www.sport.news.ru/main.aspx
http://sport.news.ru/Main.aspx (Google различает регистр части url, идущей после доменного имени,
так что Main.aspx и main.aspx для него две совершенно разные страницы).
Теперь подумаем, при помощи чего мы все это сможем сделать. Кто сказал "чего тут думать, тут гуглить нужно"? :) Хорошо, давайте попробуем.
Набраем ключевые слова "url rewriting asp.net" и ... когда-нибудь, я надеюсь, мы найдем ссылку на эту статью
(интересно, кто-нибудь из программистов-педантов уйдет в бесконечный цикл? :), но пока давайте немного помечтаем, и представим себе,
что бы нам выдала абсолютно релевантная машина. Только будем рассматривать ссылки в обратном порядке, от самых примитивных,
к самым функциональным, хорошо?
Итак, самая нижняя ссылка результатов запроса
Самый простой вариант с минимумом возможностей. Вы просто добавляете в <web.config> секцию с парами url
"откуда перенаправлять" - "куда перенаправлять". Возможны только статические urls, никаких шаблонов, а тем более регулярных выражений.
Пригодиться это может только в простейших случаях. Например, начитавшись статей по SEO, вы захотите переименовать статью на
вашем сайте из "Article28.aspx" в "TenTopSeoRules.aspx". Чтобы не потерялись закешированные поисковиками и сохраненные пользователями
ссылки, вы можете добавить в <web.config> такие строки:
<configuration>
<system.web>
<urlMappings enabled="true">
<add url="~/Article28.aspx" mappedUrl="~/TenTopSeoRules.aspx"/>
</urlMappings>
</system.web>
</configuration>
|
Как-то у Scott Guthrie
1 спросили, почему URL Mapping не поддерживает регулярные выражения.
Он ответил, что как раз в это время они разрабатывали IIS 7.0 и решили, что в защищенном и масштабируемом решении было бы неплохо
использовать новые мощные возможности новой версии IIS - так что более богатую функциональность они просто отложили
до какой-нибудь будущей версии.
Более подробно (если там вобще есть о чем читать) о URL Mapping вы можете посмотреть в
ASP.NET Quickstart Tutorials.
Но, в любом случае, ничего из того, что нам нужно, он нам предложить не сможет.
Продолжаем продвигаться по нашему списку ссылок вверх. Следующий вариант
Эта утилита входит в состав
IIS 6.0 Resource Kit.
и является не частью ASP.NET, как предыдущий вариант, а ISAPI модулем для IIS. Возможности ее также очень ограничены,
она может всего три вещи:
-
Статически перенаправлять одни urls на другие, в пределах одного и того же приложения. Причем, насколько я понял, шаблонов,
а тем более регулярных выражений, она так же не поддерживает (чуствуется дух Scott Guthrie? :).
-
Так же статически перенаправлять urls на urls других приложений, в этом случае url, на которые идет перенаправление нужно
задавать абсолютно, начиная с http://.
-
И, наконец-то, третий вариант, который не поддерживается стандартным ASP.NET mapping - вы можете указать, что при запросе
определенного url нужно возвращать некоторый код ошибки. Для этого используется формат "/url=xxx,y,desc", где xxx - это http статус,
y - вспомогательный код ошибки (suberror), а desc - текст сообщения об ошибке.
Сама утилита состоит из двух файлов, RemapUrl.dll, который нужно зарегистрировать как ISAPI модуль под IIS и
конфигурационного файла RemapUrl.ini. В посте
RemapURL -Complete Instructions?
можно прочитать подробнее, как нужно подключать RemapUrl.dll, а ниже приведен пример конфигурационного файла (символы ";" используются
в нем для выделения комментариев).
[Mappings]
; - Local mapping
/URL1=/Some-Other-URL
; - Redirect mapping
/URL2=http://www.microsoft.com
; - Error mapping
/URL3=500,13,Server Too Busy
|
Для наших целей его возможностей явно не хватает, так что мы переходим к следующей ссылке.
1 Scott Guthrie - генеральный менеджер в Microsoft Developer Division.
"Скромный" список продуктов, которыми занимаются группы его разработчиков, включает в себя Common Language Runtime,
ASP.NET, IIS 7.0, Visual Web Developer и пр.