
Давайте теперь посмотрим, как можно реализовать наши требования при помощи ISAPI Rewrite.
-
Работа с поддоменами
Во-первых, нужно связать наше веб-приложение с нужными доменами под IIS. Делается это в оснастке IIS, при помощи диалога "Advanced Web Site Identification",
показанного на
рис. 1.
В нем мы дожны перечислить все варианты интересующих нас поддоменов, а именно:
- news.ru
- www.news.ru
- sport.news.ru
- www.sport.news.ru
- и т.д.
Кроме этого, ISAPI Rewrite позволяет сужать область действия правил, на основании разнообразных условий. В том числе, можно накладывать
условия и на домены. Так, например, выглядит правило, перенаправляющее все запросы из домена www.sport.new.ru в sport.news.ru:
RewriteCond %{HTTP:Host} ^www.sport.news.ru$
RewriteRule (.*) http://sport.news.ru$1 [NC,R=301]
|
Директива NC позволяет не обращать внимание на регистр, а R=301 указывает, что нужно вернуть браузеру код возврата 301 (permanent redirect).
-
Формирование SEO и User friendly urls
Легко достигается за счет тех же правил. Вот, например, правило, поддерживающее преобразование urls вида
http://sport.news.ru/ukraine/dinamo-kiev/2007
во внутренние urls вида
http://sport.news.ru/list.aspx?country=ukraine&club=dinamo-kiev&year=2007:
RewriteCond %{HTTP:Host} ^sport.news.ru$
RewriteRule /([-\w]+)/([-\w]+)/(\d+) /list.aspx?country=$1&club=$2&year=$3 [NC,L]
|
Регулярное выражение [-\w]+ обозначает один и больше алфавитно-цифровых символов или дефисов (дефисы тоже используются в названиях),
выражение \d+ обозначает одну и больше цифру, директива "L" (Last rule) указывает, что не нужно продолжать применять оставшиеся правила,
а сразу выполнять rewriting. Конечно, можно было бы задать более жесткие ограничения (например ограничить год четырмя цифрами),
но для того, чтобы понять общую идею, достаточно и такого простого варианта.
-
Использование статических urls, включающие ключевые слова вместо динамических страниц с параметрами
Это почти то же, что и предыдущий пункт, но я хотел обратить внимание на один ньюанс. Для стран или названий клубов из предыдущего примера
вполне допустимо использовать уникальные литеральные имена. Однако, для названий статей этого уже не достаточно - нереально генерировать
уникальные да еще и осмысленные (т.е. содержащие ключевые слова) названия для тысяч статей. Поэтому здесь удобнее совмещать оба типа названий,
формируя неуникальное литеральное имя (которое во время rewriting будет просто игнорироваться) и уникальный id, добавляемый к окончанию имени
через дефис. Вот пример правила, преобразовывающего urls вида
http://sex.news.ru/topmodels/dima-bilan-with-famous-top-model-2369
во внутренние urls вида
http://sex.news.ru/list.aspx?rubric=topmodels&articleId=2369:
RewriteCond %{HTTP:Host} ^sex.news.ru$
RewriteRule /([-\w]+)/([-\w]*)-(\d+) /list.aspx?rubric=$1&articleId=$3 [NC,L]
|
-
И, наконец-то, использование только одного url из нескольких, ведущих на одну и ту же страницу (чтобы избежать распыления рейтинга,
так как поисковики могут воспринимать эти urls как разные страницы)
Для примера, если у нас есть страница http://sport.news.ru/toplist/, то на нее можно сослаться как минимум еще двумя способами:
- http://www.sport.news.ru/toplist/ - нельзя забывать о пользователях, которые могут набирать url как с www так и без
- http://sport.news.ru/TopList/ - поисковики, по крайней мере Google, чуствительны к регистру той части url, которая идет после доменного имени
Для того, чтобы решить эту проблему, нужно перенаправлять обращения ко всем urls на один url, устанавливая код возврата 301 (permanent redirect).
Сделать это можно например так:
; Перенаправить все запросы к домену с www на домен без www
RewriteCond %{HTTP:Host} ^www.sport.news.ru$
RewriteRule (.*) http://sport.news.ru$1 [NC,R=301]
; Приводить все запросы к низкому регистру
RewriteRule ^(.*\u.*)$ $1 [R=301,CL]
|
Директива CL позволяет привести запрос к низкому регистру.

Ну вот, пожалуй и все. Обычно, в конце статьи, нужно написать какую-то завершающую фразу, которая создаст иллюзию завершенности, подведет итоги и заставит
почуствовать прочитанный текст чем то достаточным и законченным :) Но что писать - я честно говоря не знаю. Обзор есть, решения описаны, ссылки даны,
примеры приведены - а дальше идет уже ваша работа: изучение документации, выяснение подробностей, анализ, выбор решения и многое многое другое.
Так что я просто пожелаю вам удачи и желания сделать что-то лучше и красивее!