URL Rewriting
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



URL Rewriting Expand / Collapse
Автор
Сообщение
06.06.2007 11:33
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.09.2007 12:58
Сообщ.: 25, Visits: 179
Как сделать так чтобы на моем сайте адрес в строке запроса страницы http://.../page.aspx  выглядел бы так http://.../page и чтобы если пользователь набрал в строке запроса http://.../page то ему бы открылась http://.../page.aspx?

Заранее спасибо.

Сообщ. #913845
06.06.2007 12:02
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234, Visits: 65 445
Для этого надо использовать перезапись URL. Смотри например Ionic's ISAPI Rewrite Filter
Сообщ. #913846
06.06.2007 12:06
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.09.2007 12:58
Сообщ.: 25, Visits: 179
А можно ли это делать средствами asp.net?
Сообщ. #913847
06.06.2007 12:54
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234, Visits: 65 445
Можно. Набери в google ASP.NET url rewrite.
Сообщ. #913849
08.06.2007 9:36
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.09.2007 12:58
Сообщ.: 25, Visits: 179
Я читала Url Rewriting in ASP.NET

Только мне не совсем понятно куда именно в веб конфиге добавлять

<RewriterConfig>
   <Rules>
     ...
   </Rules>
</RewriterConfig>

И достаточно ли только этого или надо еще чтото?

 

Сообщ. #913907
08.06.2007 9:45
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234, Visits: 65 445
Это нестандартная секция и в статье должно было быть указано где именно в web.config ее надо разместить. Могу только предположить, что это надо делать внутри тега <configuration>.
Сообщ. #913909
09.06.2007 11:26
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.09.2007 12:58
Сообщ.: 25, Visits: 179
В том то и проблема что в статье этого не указано
Сообщ. #913960
09.06.2007 11:57
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234, Visits: 65 445
Ссылку на статью можно увидеть?
Сообщ. #913962
10.06.2007 9:10
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.09.2007 12:58
Сообщ.: 25, Visits: 179
http://msdn2.microsoft.com/en-us/library/ms972974.aspx
Сообщ. #913988
03.08.2007 22:42
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 03.08.2007 23:01
Сообщ.: 1, Visits: 4
Вот единственное, что работает как следует

http://www.urlrewriter.net/

В последних версиях получается сделать чтобы и AJAX работал, и темы, и все остальное.

Вот пример использования. (замените круглые скобки на галки XML в Web.config и в Rewriting.browser)

1. Договариваемся с хостингом, чтобы вам включили опцию "обрабатывать все запросы с помощью ASPNET".
Дело в том, что JPG, JS, PNG и проч. IIS обрабатывает сам, так что rewriting не сработает для этих файлов как надо. Но хуже всего то, что обработчик Default.aspx вызывается тоже самим IIS, так что запрос типа: ~/forums/aspnet/rewriting/ не спросит у рерайтера, а попытается обратиться к файлу Default.aspx из соотв. папки.

Результат этой операции - все запросы будут обрабатываться ASPNET.
Что это дает? Рерайтер сможет переписать любой путь. Можно даже полностью запретить прямое обращение к файлу с расширением ASPX помимо предусмотренного рерайтером пути.

Это может повлиять на производительность сайта и логику HTTP модулей. Например, если вы что-то делали с помощю модуля для всех ASPX страниц, то теперь это будет делаться и для JPG, и для HTML, тоесть и для статических файлов. Так что, например, без оглядки открывать в модуле сессию доступа к базе данных будет уже не кошерно.

Если вы не готовы к такому, то лучше рассмотрите технологию SES Urls, или предусмотрите URLS типа
~/articles/rewriting_with_aspx_fake_page/ShowPost.aspx
тоесть вы обманываете IIS - все что .aspx - перенаправляется на обработку ASPNET, и рерайтер может это обработать.

2. Конфигурация.

2.1 Цепляем сборку к проекту. Можно положить Intelligencia.UrlRewriter.dll в папку bin, или как вам удобнее.

2.2
Web.config

Приведу полный пример, почти из жизни.

(?xml version="1.0"?)(configuration)
(configSections)
(section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/)
(/configSections)

(rewriter)
(if header="HTTP_HOST" match="www.myparty.ru")
(redirect url="^~/.*" to="http://www.mysuperparty.ru" permanent="true"/)
(/if)
(if header="HTTP_HOST" match="myparty.ru")
(redirect url="^~/.*" to="http://www.mysuperparty.ru" permanent="true"/)
(/if)
(if header="HTTP_HOST" match="www.my-party.ru")
(redirect url="^~/.*" to="http://www.mysuperparty.ru" permanent="true"/)
(/if)
(if header="HTTP_HOST" match="my-party.ru")
(redirect url="^~/.*" to="http://www.mysuperparty.ru" permanent="true"/)
(/if)

(rewrite url="^~/$" to="~/Default3.aspx/" /)
(if url="^~/(vasya|masha).*")
(if url="^~/(\w+)/(sex|drugs|rocknroll).*" /)
(!-- вся вечеринка здесь --)
(redirect url="^~(.*\w+)$" to="~$1/"/) (!-- запрет URL без слеша в конце, очень важно! --)
(rewrite url="^~/(\w+)/(\w+)/$" to="~/use.aspx?what=$1&who=$2" processing="stop" /)
(/if)
(/if)
(/rewriter)

(system.web)
(httpModules)
(add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter"/)
(/httpModules)
(/system.web)
(/configuration)

Очень рекоммендую использовать только полный разбор строки, с помощью $ в конце. Это избавит вас от очень многоих хлопот и ловли блох

2.2 Корректный postback - на тот же URL, с которого вы пришли. Если не использовать - то при постбеке ASPNET ут же вывалит вам свои отвратительные кишки (путь к обработчику с расширением ASPX в конце)
Важный пункт, которого нет на сайте urlrewriter.net (искал отдельно)

App_Browsers/Rewriting.browser

(browsers)
(browser refID="Default")
(controlAdapters)
(adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="Intelligencia.UrlRewriter.FormRewriterControlAdapter" /)
(/controlAdapters)
(/browser)
(/browsers)

3. тестируем

А вот вобщем то и все.
Теперь делаем запрос типа:
/masha/sex

он редиректится с помощью нашего правила (redirect) в:
/masha/sex/

происходит еще один запрос от броузера клиента
(можно было бы и сразу набрать / в конце)

и теперь уже задействуется второе правило (rewrite):
/use.aspx?who=masha&what=sex

4.Вопросы

4.1 Зачем нужен этот (if url="^~/(vasya|masha).*") ?
если его убрать, то на вечеринку попадут и те, кого сюда не звали.
Например, какой-нибудь /ThirdPartyPlugin/script.js попадая под наше правило превратится в:
/use.aspx?who=ThirdPartyPlugin&what=script.js
а этого нам точно не надо. Ведь на вечеринке нам надо расслабляться, а не отслеживать, чтобы под наше правило не попало что-то лишнее.

4.2 Зачем нужны (if header="HTTP_HOST" match="www.myparty.ru")
Чтобы автоматически перенаправить вторичные домены, которые мы зарегистрировали для нашей вечеринки, на на основной домен: mysuperparty
Не хорошо, если у пользователя и в поисковиках возникнут разные варианты. google тот и вовсе обидится, если вторичные домены выдают дубликат информации, зато оценит, что вы сделали перенаправление.
Вторичные домены в нашем случае - это для тех, кто любит набирать ссылку руками, но не всегда помнит точный адрес.
Нужны они или нет - сами думайте. Как правило это если вы хотите, чтобы ваш бренд не закиберсквоттили, используя похожие имена, или у вас просто есть старые домены, которые вы использовали для этого же проекта.

5 На последок - совет. Старайтесь использовать настолько точный разбор строки регулярным выражением, насколько это возможно. Используйте $ в конце строки, чтобы точно указать конец URL и тем самым как можно точнее ограничить диапазон возможных ошибок в URL запроса.

(не путать с urlrewritING.net) этот работает, но не дает именно того, что вам нужно - отсутсвия .aspx в запросе.

Георгий Полевой
Сообщ. #915148
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.

Время GMT +3:00, Сейчас 10:26