На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Редиректы на asp. net mvc
    Здравствуйте. Есть сайт, сделанный на asp. net mvc
    Как сделать постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml ?
    или поставить 404 ошибку на site.ru/page1.chtml.
      site.ru/page1.chtml существует?
      я чет не черта не пойму, вопрос в теме .NET: Web приложения, chtml разновидность html для мобильных браузеров, вопрос по html или по aspx коду?
      ну раз вопрос в теме Net отвечю как в aspx делается:
      переадресация
      ExpandedWrap disabled
        Response.Redirect("page2.chtml")


      ошибки
      ExpandedWrap disabled
        context.Response.ContentType = "text/plain"
        context.Response.Write("301")
        context.Response.StatusCode = 301
        context.Response.SuppressContent = True
        context.Response.Flush()
        context.Response.End()

      ExpandedWrap disabled
        context.Response.ContentType = "text/plain"
        context.Response.Write("404")
        context.Response.StatusCode = 404
        context.Response.SuppressContent = True
        context.Response.Flush()
        context.Response.End()
        Спасибо. Да. Я здесь уже разобралась, неправильно вопрос задала.
        Вопрос конечно про aspx коду.
        Редирект таким способом не получился. Можно по подробнее.
        Возможно я что то не понимаю. Но ошибка сама по себе стандартная, и она настроена для несуществующих или удаленных страниц. Мне не поставить именно на определенную страницу. И еще вопрос можно ли поставить ошибку на целое представление?
        На php аналог этого файл .htaccess
          Смотрите как я сделал:

          Был сайт, делал племянник, расплодил кучу статичных страниц, попросил перевести на мною созданный движёк (делал с 0-ля все на ASP.NET), но чтобы ссылки не потерялись, а передавались по редиректу 301.

          Доступа к .htaccess нет (по его словам, самому лень было проверять). В итоге подумал, решил перехватывать запрос от пользователя и делать редирект в случае совпадения.

          Открываем Global.asax. Если нет - создаем.

          ExpandedWrap disabled
                protected void Application_BeginRequest(object sender, EventArgs e)
                {
                    var host = Request.Url.Host;
                    String s = RedirectS(Request.Url.PathAndQuery.ToUpper());
                    if (s.Length > 3)
                    {
                        Response.Clear();
                        Response.StatusCode = 301;
                        Response.Status = "301 Moved Permanently";
                        Response.AddHeader("Location", "http://www.lispert.com" + s);
                        Response.End();
                        return;
                    }
                }
             
                public String RedirectS(String urlstr)
                {
                    if (urlstr == "/pages/News.aspx".ToUpper())  return "/pages/records.aspx?menu=2&useas=news";
                }


          Как-то так.

          В результате если мы наберем http://www.lispert.com/pages/News.aspx нас перебросит на http://www.lispert.com/pages/records.aspx?menu=2&useas=news

          Надеюсь был полезен
            Цитата sorbena @
            И еще вопрос можно ли поставить ошибку на целое представление?

            Я вот рядом ща с UncleBob обсуждал эту тему, на самом деле мне PHP незнаком, но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное.
            Цитата sorbena @
            постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml

            можно еще так:
            в коде aspx например в Global.asax, функция Application_Start

            выполнить некий код:
            ExpandedWrap disabled
              ' Формат: RouteTable.Routes.MapPageRoute("Вежливое имя", "url", "куда переадресовывать")
               RouteTable.Routes.MapPageRoute("a1", "page1.chtml", "~/page2.chtml")
              ' и таким образом можно много фантазировать
               RouteTable.Routes.MapPageRoute("a2", "page{key}", "~/page2.chtml")' все pageXXXX попадут на page2.chtml
               RouteTable.Routes.MapPageRoute("a3", "page", "~/page2.chtml")' site.ru/page попадет на site.ru/page2.chtml
              ' при этом в браузере видно site.ru/page а по факту site.ru/page2.chtml, извращайся нехочю


            если нужно чтоб пользователь набирая site.ru/page1.chtml попадал на site.ru/page2.chtml и это видно было в строке браузера
            нужно перехватить запрос, где его перехватить я не могу тебе ответить не зная структуры сайта, если есть site.master то конечно в нем, к примеру функция Page_Load
            ExpandedWrap disabled
              If Request.FilePath = "/page1.chtml" Then
               Response.Redirect("/page2.chtml")
              End If


            честно сказать ХЗ будет работать или нет, повторюсь :wall: >:( :wall: , больше нужно информации по структуре сайта.
            Сообщение отредактировано: -=VIRUS=- -
              Цитата -=VIRUS=- @
              но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное.
              Вов, это правда? Мне кажется они одно и то же..

              А вот пример из синтаксиса веб.конфига:
              ExpandedWrap disabled
                <?xml version="1.0"?>
                <!--
                    Note: As an alternative to hand editing this file you can use the
                    web admin tool to configure settings for your application. Use
                    the Website->Asp.Net Configuration option in Visual Studio.
                    A full list of settings and comments can be found in
                    machine.config.comments usually located in
                    \Windows\Microsoft.Net\Framework\v2.x\Config
                -->
                <configuration xmlns:w="http://schemas.microsoft.com/.NetConfiguration/v2.0">
                  <appSettings/>
                    <system.web>
                        <!--
                            The <customErrors> section enables configuration
                            of what to do if/when an unhandled error occurs
                            during the execution of a request. Specifically,
                            it enables developers to configure html error pages
                            to be displayed in place of a error stack trace.
                        -->
                        <customErrors mode="RemoteOnly" defaultRedirect="errors/400">
                            <error statusCode="403" redirect="errors/403" />
                            <error statusCode="404" redirect="errors/404" />
                        </customErrors>
                    </system.web>
                </configuration>
                Цитата Leprecon @
                Вов, это правда? Мне кажется они одно и то же..

                Ну в в принципе да, но web.config все-таки побогаче функционалом будет, чем .htaccess. Не берусь сравнивать, но мне так кааца.
                Сообщение отредактировано: UncleBob -
                  Цитата UncleBob @
                  но web.config все-таки побогаче функционалом будет, чем .htaccess. Не берусь сравнивать, но мне так кааца.
                  Я это и имел в виду..

                  Добавлено
                  Цитата -=VIRUS=- @
                  где его перехватить я не могу тебе ответить не зная структуры сайта, если есть site.master то конечно в нем, к примеру функция Page_Load
                  По моему он бредит. Урл редирект и Page_Load - это как сравнить хищника и травоядного.
                    Цитата Leprecon @
                    По моему он бредит. Урл редирект и Page_Load - это как сравнить хищника и травоядного.

                    Чю это я брежу? я в site.master ловлю url которых не существует, писал класс SiteMap который собственно и следит за тем что находится в строке браузера пользователя, вот код с того сайта что пишу сейчас:
                    ExpandedWrap disabled
                      ' Site.Master
                      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                         SiteMap.Redirect(Request, Response)
                      End Sub
                      ' а вот и процедура, которая прячет Default.aspx, и запрещает вызывать формы по прямому адресу, ну к примеру адрес Form/Account/Registration.aspx
                      ' попадет /err/bad
                      '
                      Sub Redirect(ByVal Request As HttpRequest, ByVal Response As HttpResponse)
                          If Request.FilePath = "/Default.aspx" Then
                               Response.Redirect("/")
                          ElseIf LCase(Mid(Request.FilePath, 1, 5)) = "/form" Then
                               Response.Redirect("/err/bad")
                          End If
                      End Sub

                    ну и по адресу /err/bad попадем на Default.aspx и передадим ключик "bad" что заставит в Default.aspx отобразить ошибку о не верном URL
                    по сути конечно урл верный, и даже ошибок не вызовет. Я таким образом спрятал все URL
                    ExpandedWrap disabled
                      RegisterRoutes(ByVal routes As RouteCollection)
                              routes.Clear()
                              '......
                              routes.MapPageRoute("err", "err/{key}", "~/Default.aspx")
                              '......
                      End Sub

                    Комментируйте, как бы сделали Вы)

                    Добавлено
                    Цитата UncleBob @
                    Ну в в принципе да, но web.config все-таки побогаче функционалом будет, чем .htaccess. Не берусь сравнивать, но мне так кааца.

                    У меня в реале есть PHP кодер, мнение одного человека конечно не существенно, но даже с его слов было понятно что это вещи разные, начнем с того что PHP технология изначально отличается, например там нет такого понятия как компиляция, функционал .htaccess отличается от web.config в большем объеме, там есть такие вещи которые в ASPX некогда бы не понадобились и на оборот(к сожалению чтоб привести примеры мне нужно с ним встретится, когда это будет не знаю).
                    Цитата Leprecon @
                    Вов, это правда? Мне кажется они одно и то же..

                    если рассуждать с точки зрения,
                    Цитата sorbena @
                    И еще вопрос можно ли поставить ошибку на целое представление?

                    опуская остальной функционал, то конечно они идентичны. :D
                      Цитата -=VIRUS=- @
                      начнем с того что PHP технология изначально отличается, например там нет такого понятия как компиляция, функционал .htaccess отличается от web.config

                      теперь осталось понять про отношение .htaccess к PHP, и мы, возможно, откроем что-то новое
                        Цитата -=VIRUS=- @
                        Чю это я брежу? я в site.master ловлю url которых не существует, писал класс SiteMap который собственно и следит за тем что находится в строке браузера пользователя, вот код с того сайта что пишу сейчас:
                        Ну да, технически можно и так.. Но я бы это назвал ситуацией, когда на грузовике пытаются въехать в гараж для легковушки, понимают что не вмещаются, и едут в другой гараж. Вместо того, чтобы сразу прикинуть какой гараж подходящий.

                        По хорошему, зачем вообще грузить обработчик запроса, если редиректнуть его можно еще на стадии подготовки? Для урл-реврайта обычно пишут HttpModule, который будет перехватывать события приложения, и редиректить запросы на другие урлы.

                        Модуль пишется один раз, и используется для всех сайтов. Пути настраиваются в конфиге, или каком-нить дополнительном файле redirect.sitemap. И в этом случае, сайту даже не надо знать об этом функционале, потому-что это скорее инфраструктура, чем логика. В общем-то и писать ничего не надо, такие модули уже есть.

                        Цитата -=VIRUS=- @
                        если рассуждать с точки зрения,
                        Если же действительно говорить о конкретной ситуации..
                        1. Если редиректить надо несуществующие удаленные страницы, но с определенными адресами, то зачем тогда опять создавать эти страницы? Проще воспользоваться урл-редиректом.
                        2. Редиректнуть всю ошибку 404 еще проще, я уже написал как.
                        3. Про представления, я честно говоря не понял, что имеется в виду. Но если речь о расширении *.shtml, все страницы с которым надо редиректнуть, то опять же обработчик не обязателен, достаточно конфига и реврайтинга.

                        Добавлено
                        Для статических адресов есть средство в стандартных модулях через web.config:
                        ExpandedWrap disabled
                          <configuration>
                            <location path="services.htm">
                              <system.webServer>
                                <httpRedirect enabled="true" destination="http://domain.com/services" httpResponseStatus="Permanent" />
                              </system.webServer>
                            </location>
                            <location path="products.htm">
                              <system.webServer>
                                <httpRedirect enabled="true" destination="http://domain.com/products" httpResponseStatus="Permanent" />
                              </system.webServer>
                            </location>
                          </configuration>


                        Для динамических расширение для url rewriting: http://www.iis.net/learn/extensions/url-re...-rewrite-module

                        Как написать свой модуль: http://msdn.microsoft.com/en-us/library/ms972974.aspx
                          Цитата Leprecon @
                          Для динамических расширение для url rewriting: http://www.iis.net/learn/extensions/url-re...-rewrite-module

                          Как написать свой модуль: http://msdn.microsoft.com/en-us/library/ms972974.aspx


                          Тут большое спасибо, познакомлюсь. Честно спасибо.

                          Цитата UncleBob @
                          теперь осталось понять про отношение .htaccess к PHP, и мы, возможно, откроем что-то новое

                          тут мне даже ответить нечего :huh: Знакомимся с Apache. Я вот сейчас думаю и меня осенило, это намек на то что Apache сервера юзают не только PHP сайты что ль?
                          прежде чем так намикать, читай внимательнее. Ответ был исходя из вопроса автора
                          Цитата sorbena @
                          На php аналог этого файл .htaccess


                          Добавлено
                          эмм... я несовсем понял что это, у меня даже похожего нечего нет на URL Rewrite, проект в vs.2010 (net4.0), Тип проекта "Веб-приложение ASP.NET"
                          http://www.iis.net/learn/extensions/url-re...-rewrite-module

                          Есть еще вот такое, но мое мне нравится больше :D
                            Цитата -=VIRUS=- @
                            Я вот сейчас думаю и меня осенило, это намек на то что Apache сервера юзают не только PHP сайты что ль?
                            Ясен пень. Извини, Вов, что за тебя ответил :)

                            Цитата -=VIRUS=- @
                            прежде чем так намикать, читай внимательнее. Ответ был исходя из вопроса автора
                            Это не был вопрос автора. Ну как мне кажется. Это была аналогия, с помощью которой автор хотел нам объяснить чего она хочет.

                            Цитата -=VIRUS=- @
                            на самом деле мне PHP незнаком, но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное.

                            ПХП, в целом ничем от ASP.NET MVC не отличается. Но да, ASP.NET компилируется, а его библиотеки умеют из кода подгружать шаблоны хтмл, вроде aspx. Однако и то и то это "в основном текстовые" обработчики хттп запросов, реализованные с помощью расширений, которые перехватывают определенные запросы, написанных для своих веб-серверов.

                            И так же веб-конфиг это не конфиг параметров одного единственного сайта. Это конфиг и сайта и самого ИИСа. В ИИСе куча плагинов, которые мышкой позволяют делатьнастройки сайта, безопасности, других глобальных параметров, но сохраняют они все в веб.конфиге. Внутри каждой папки ИИСа, есть веб.конфиг. Он наследует все настройки веб.конфигов родительских папок. А рутовый для сайта веб.конфиг наследует настройки машин.конфиг компа.

                            Добавлено
                            Вот тебе ссылка на мое мнение, почитать на досуге, Ниши, занимаемые Java и .NET - дубль два (сообщение #3352790)

                            Добавлено
                            Цитата -=VIRUS=- @
                            эмм... я несовсем понял что это, у меня даже похожего нечего нет на URL Rewrite, проект в vs.2010 (net4.0), Тип проекта "Веб-приложение ASP.NET"
                            Конечно нет. Это же расширение. Думал догадаешься посмотреть оглавление рядом. Поэтому дал ссылку не на скачивание расширения без хелпа, а на хелп, без ссылки на расширение. http://www.iis.net/learn/extensions/url-re...-rewrite-module Раздел "Where to get the URL Rewrite module".
                              Цитата Leprecon @
                              Это не был вопрос автора. Ну как мне кажется. Это была аналогия, с помощью которой автор хотел нам объяснить чего она хочет.

                              Я другое пытался сказать, пусть будет аналогия и автор нам пыталась объяснить что она хочет, в полне логично что я читая автора вижу "аналогию", отвечаю ей той же аналогией
                              Цитата -=VIRUS=- @
                              начнем с того что PHP технология изначально отличается

                              ну мы ведь прекрасно понимаем что речь иден не о PHP и ASPX а о IIS и Apache ?

                              я уже на эту херь не первый раз натыкаюсь,
                              тут както пишу "ява" по тексту понятно что реч идет о javascript, он меня спрашивает: ты java то видел?
                              такое ощущение что стой стороны клавы сидит вундеркинд и ему уже скушно тут общаться, или я его действительно уже зае... вопросами, ну реально отвечает только он, если так реагировать, дык он и останется тут единственным "учителем" со школотой возится.

                              И еще момент, уже ко всем относится, народ с большим уважением к Вашему опыту, создается впечатление что метод написания кода всегда шаблонный, если есть какой то вопрос он обязательно должен быть решен тем способом что описано в MSDN,
                              далеко ходить не будем код предложенный lourtoy, не кто даже не разбирался в нем, сразу пошли предложения на MSDN, подключение модулей и.т.д.
                              зачем? писать модули когда это решается простым кодом.


                              ExpandedWrap disabled
                                // Порождается в начале каждого запроса
                                {
                                        var host = Request.Url.Host;
                                        String s = RedirectS(Request.Url.PathAndQuery.ToUpper());
                                        if (s.Length > 3)
                                        {
                                            Response.Clear();
                                            Response.StatusCode = 301;
                                            Response.Status = "301 Moved Permanently";
                                            Response.AddHeader("Location", "http://www.lispert.com" + s);
                                            Response.End();
                                            return;
                                        }
                                    }
                                 
                                    public String RedirectS(String urlstr)
                                    {
                                        if (urlstr == "/pages/News.aspx".ToUpper())  return "/pages/records.aspx?menu=2&useas=news";
                                    }


                              Цитата Leprecon @
                              Вот тебе ссылка на мое мнение, почитать на досуге

                              абсолютно согласен.

                              Цитата Leprecon @
                              Конечно нет. Это же расширение. Думал догадаешься посмотреть оглавление рядом. Поэтому дал ссылку не на скачивание расширения без хелпа, а на хелп, без ссылки на расширение.

                              да ну н... это Вы мне рассказывали как из гранатомета по воробьям стрелять?
                              :D :D :D :D :D :D
                              напомню вопрос
                              Цитата sorbena @
                              Как сделать постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml ?
                              или поставить 404 ошибку на site.ru/page1.chtml
                                Цитата -=VIRUS=- @
                                И еще момент, уже ко всем относится, народ с большим уважением к Вашему опыту, создается впечатление что метод написания кода всегда шаблонный, если есть какой то вопрос он обязательно должен быть решен тем способом что описано в MSDN
                                Тема слишком обширная или расплывчатая. Но по большей части - да.. Это улучшает модульность, и читаемость для других участников команды. А это почти всегда должны быть главные критерии. А дополнительные библиотеки, да еще с появлением NuGet, я считаю скорее обязаловкой. Ибо придумывать велосипеды - это самое ужастное что делает программист.

                                Цитата -=VIRUS=- @
                                тут както пишу "ява" по тексту понятно что реч идет о javascript
                                Я бы тоже не стал называть джаваскрипт джавой. У меня внутри все переворачивается от такого использования слова.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0560 ]   [ 17 queries used ]   [ Generated: 28.03.24, 13:12 GMT ]