Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Обзор инструментов SEO-оптимизатора и методов продвижения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Ноябрь 2007 → | ||||||
2
|
3
|
4
|
||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
9
|
10
|
11
|
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
Автор
Статистика
1.618 подписчиков
0 за неделю
0 за неделю
URL rewriting в ASP.NET для поисковой оптимизации (SEO) (окончание)
URL rewriting в ASP.NET для поисковой оптимизации (SEO) (окончание)И снова я рад вас видеть! Перед тем, как я продолжу эту статью, я хотел бы напомнить, что эта рассылка является всего лишь частичным отражением сайта .NET: Записки программиста. Частичным - потому что рассылка не может заменить собой сайт, на котором найдется место и разделу - для статей, и блогу - для коротких заметок, и галерее - для полезных утилит или смешных историй. Так что, если вам интересно, заходите на сайт .NET: Записки программиста, подписывайтесь на блог - и вы будете узнавать о любых изменениях сайта, как только они будут происходить. А теперь, вернемся к нашей истории ... Если вы еще помните :), мы собирались разобраться, как реализовать url rewriting своими руками. Все сводится к использованию метода HttpContext.RewritePath. При помощи параметра string filePath можно указать, какая страница нашего веб-приложения будет выполнятся на самом деле. RewritePath содержит несколько переопределенных вариантов, которые позволяют изменить такие параметры запроса как query string или path info.
Итак, что для того чтобы перенаправить один url на другой, мы должны:
Осталось корректно обработать аттрибут "action". Раньше, в ASP.NET 1.1, разработчикам приходилось переопределять элемент управления Form, а это значит - менять код всех страниц, заменяя на них стандартный <asp:form>. Кроме того, иногда это приводило к проблемам в Visual Studio WYSIWYG designer. В ASP.NET 2.0 все можно сделать проще, благодаря использованию ASP.NET 2.0 CSS Control Adapters. Эта технология позволяет связывать ваши классы с какими-то типами элементов управления. Связанные классы могут изменять html, генерируемый элементами управления в процессе рендеринга. Более подробно я описывал эту технологию в предыдущей статье "Как совместить заказной дизайн и ASP.NET web-сайты". То есть, мы создаем control adapter для класса HtmlForm, переопределяем в нем метод Render и выполняем rendering используя собственный класс, унаследованный от HtmlTextWriter и отличающися от него только алгоритмом добавления аттрибута "action". Чтобы упростить себе жизнь, воспользуемся одним малоизвестным трюком - если аттрибут "action" вообще не указан - браузер будет использовать для post-back url, указанный в строке запроса, что нас вполне устраивает. Итак, пишем код для form control adapter:
Теперь осталось связать наш control adapter с элементом HtmlForm. Создаем класс Form.browser с таким вот содержимым:
и помещаем его в служебную папку App_Browsers нашего приложения. Вуаля! Теперь значение аттрибута "action" всегда пустое и post-back страниц при любой реализации rewriting должен работать нормально. А теперь пришло время понять, зачем мы разбирали нелегкий жизненный путь запросов :) Вспомните, кроме всего прочего, мы хотели перенаправлять urls типа http://news.ru/fooball/. Все ли мы сделали, чтобы работать с такими запросами? Уже догадались, в чем дело? Правильно! Все, о чем мы только что говорили, реализовано в нашем веб-приложении на ASP.NET. Но для того, чтобы ему выполнить rewriting, он должен как минимум получить управление. По умолчанию IIS настроен так, чтобы передавать управление ASP.NET при запросах страниц с расширением .aspx (и еще некоторых расширений). Если же он получит запрос без расширения, то будет думать, что это каталог и попробует определить для этого пути документ по умолчанию - то есть сделает вовсе не то, что нам нужно. Поэтому, чтобы мы могли обрабатывать такие запросы, нам прийдется немного повозится с настройками. Для IIS 6.0 мы воспользуемся "wildcard application mappings". Если в диалоге "Application Configuration" (см. Для IIS 7.0 все еще проще. Вам не понадобиться менять его настройки, для этого достаточно изменить конфигурационный файл приложения. IIS 7.0 позволяет выполнять модули ASP.NET как будто бы это его собственные модули. Измените web.config следующим образом:
Аттрибут runAllManagedModulesForAllRequests позволяет выполнять наш ASP.NET HttpModule в качестве модуля IIS 7.0. Вот теперь окончательно все, теперь мы знаем достаточно, чтобы реализовать SEO friendly карту сайта для news.ru. А вот и время десерта! Понятно, что должны существовать библиотеки, реализующие все то, что мы так долго обсуждали. Причем существуют как полностью бесплатные решения, так и бесплатные Lite версии решений, которые в полной версии уже стоят денег. Но и Lite версии полностью функциональны и вполне покроют наши нужды. Все библиотеки можно разделить на два класса:
UrlRewritingNet.UrlRewriteUrlRewritingNet.UrlRewrite - это бесплатная библиотека, написанная под ASP.NET 2.0. Она позволяет задавать правила, основанные на регулярных выражениях и обеспечивает корректную работу страниц при post-back. Судя по описанию, эта библиотека позволяет нормально использовать другие ASP.NET технологии, с которыми могут возникнуть проблемы (а-ля post-back) при rewriting: темы, master pages, cookieless sessions. Полезный момент - в этом решении для разбора и выполнения правил используется модель, основанная на провайдерах. В библиотеке реализован провайдер правил на базе регулярных выражений. Однако, если вам будет мало этой функциональности, вы сможете добавить своего провайдера, в котором и реализуете всю необходимую вам логику. Следующая ссылка в нашем списке UrlRewriter.NETБиблиотека, очень похожая на предыдущую. Отличается намного более обширным набором правил, команд и операторов, которые вы можете использовать при определении ваших правил. Так же бесплатная. Дальше идут ISAPI Filters Ionics Isapi Rewrite FilterБесплатный ISAPI фильтр, поддерживающий mod_Rewrite-подобный синтаксис конфигурационного файла. По возможностям очень напоминает следующее и последнее в нашем обзоре решение (ISAPI rewrite). Возможно, эти различия можно бы было найти, серьезно используя оба решения в работе, но я в свое время выбрал "ISAPI rewrite". Он до сих пор меня вполне устраивает, так что у меня просто нет необходимости тратить время на более серьезный анализ. И наконец последняя (то есть первая) ссылка нашей выборки ISAPI RewriteЭто - ISAPI Filter фирмы Helicon, разрабатывающей для веб-сайтов и другие продукты, основанные на rewriting (например "Hotlink blocker", позволяющий защитить ваш контент (изображения, файлы) от прямых ссылок или "Helicon Jet", экономящий трафик и увеличивающий производительность ASP приложений). В отличие от всех предыдущих вариантов, ISAPI Rewrite платный ($99). Но можно воспользоваться бесплатной Lite версией. Ее возможностей вполне достаточно для отдельного веб-сайта. По большому счету, от full версии она отличается всего двумя вещами:
Давайте теперь посмотрим, как можно реализовать наши требования при помощи ISAPI Rewrite.
Директива NC позволяет не обращать внимание на регистр, а R=301 указывает, что нужно вернуть браузеру код возврата 301 (permanent redirect).
http://sport.news.ru/ukraine/dinamo-kiev/2007 во внутренние urls вида http://sport.news.ru/list.aspx?country=ukraine&club=dinamo-kiev&year=2007:
Регулярное выражение [-\w]+ обозначает один и больше алфавитно-цифровых символов или дефисов (дефисы тоже используются в названиях), выражение \d+ обозначает одну и больше цифру, директива "L" (Last rule) указывает, что не нужно продолжать применять оставшиеся правила, а сразу выполнять rewriting. Конечно, можно было бы задать более жесткие ограничения (например ограничить год четырмя цифрами), но для того, чтобы понять общую идею, достаточно и такого простого варианта.
http://sex.news.ru/topmodels/dima-bilan-with-famous-top-model-2369 во внутренние urls вида http://sex.news.ru/list.aspx?rubric=topmodels&articleId=2369:
Директива CL позволяет привести запрос к низкому регистру. Ну вот, пожалуй и все. Обычно, в конце статьи, нужно написать какую-то завершающую фразу, которая создаст иллюзию завершенности, подведет итоги и заставит почуствовать прочитанный текст чем то достаточным и законченным :) Но что писать - я честно говоря не знаю. Обзор есть, решения описаны, ссылки даны, примеры приведены - а дальше идет уже ваша работа: изучение документации, выяснение подробностей, анализ, выбор решения и многое многое другое. Так что я просто пожелаю вам удачи и желания сделать что-то лучше и красивее! |
В избранное | ||