|
|
|
Forum Member
      
участник
Last Login: 28.09.2007 12:58
Сообщ.: 25,
Visits: 179
|
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234,
Visits: 65 445
|
|
|
|
|
|
Forum Member
      
участник
Last Login: 28.09.2007 12:58
Сообщ.: 25,
Visits: 179
|
|
| А можно ли это делать средствами asp.net?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234,
Visits: 65 445
|
|
| Можно. Набери в google ASP.NET url rewrite.
|
|
|
|
|
Forum Member
      
участник
Last Login: 28.09.2007 12:58
Сообщ.: 25,
Visits: 179
|
|
| Я читала Url Rewriting in ASP.NET Только мне не совсем понятно куда именно в веб конфиге добавлять <RewriterConfig> <Rules> ... </Rules> </RewriterConfig> И достаточно ли только этого или надо еще чтото?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234,
Visits: 65 445
|
|
| Это нестандартная секция и в статье должно было быть указано где именно в web.config ее надо разместить. Могу только предположить, что это надо делать внутри тега <configuration>.
|
|
|
|
|
Forum Member
      
участник
Last Login: 28.09.2007 12:58
Сообщ.: 25,
Visits: 179
|
|
| В том то и проблема что в статье этого не указано
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 234,
Visits: 65 445
|
|
| Ссылку на статью можно увидеть?
|
|
|
|
|
Forum Member
      
участник
Last Login: 28.09.2007 12:58
Сообщ.: 25,
Visits: 179
|
|
| http://msdn2.microsoft.com/en-us/library/ms972974.aspx
|
|
|
|
|
новичок
      
участник
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 в запросе.
Георгий Полевой
|
|
|
|