Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.87.209.162] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте. Есть сайт, сделанный на asp. net mvc
Как сделать постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml ? или поставить 404 ошибку на site.ru/page1.chtml. |
Сообщ.
#2
,
|
|
|
site.ru/page1.chtml существует?
я чет не черта не пойму, вопрос в теме .NET: Web приложения, chtml разновидность html для мобильных браузеров, вопрос по html или по aspx коду? ну раз вопрос в теме Net отвечю как в aspx делается: переадресация Response.Redirect("page2.chtml") ошибки context.Response.ContentType = "text/plain" context.Response.Write("301") context.Response.StatusCode = 301 context.Response.SuppressContent = True context.Response.Flush() context.Response.End() context.Response.ContentType = "text/plain" context.Response.Write("404") context.Response.StatusCode = 404 context.Response.SuppressContent = True context.Response.Flush() context.Response.End() |
Сообщ.
#3
,
|
|
|
Спасибо. Да. Я здесь уже разобралась, неправильно вопрос задала.
Вопрос конечно про aspx коду. Редирект таким способом не получился. Можно по подробнее. Возможно я что то не понимаю. Но ошибка сама по себе стандартная, и она настроена для несуществующих или удаленных страниц. Мне не поставить именно на определенную страницу. И еще вопрос можно ли поставить ошибку на целое представление? На php аналог этого файл .htaccess |
Сообщ.
#4
,
|
|
|
Смотрите как я сделал:
Был сайт, делал племянник, расплодил кучу статичных страниц, попросил перевести на мною созданный движёк (делал с 0-ля все на ASP.NET), но чтобы ссылки не потерялись, а передавались по редиректу 301. Доступа к .htaccess нет (по его словам, самому лень было проверять). В итоге подумал, решил перехватывать запрос от пользователя и делать редирект в случае совпадения. Открываем Global.asax. Если нет - создаем. 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 Надеюсь был полезен |
Сообщ.
#5
,
|
|
|
Цитата sorbena @ И еще вопрос можно ли поставить ошибку на целое представление? Я вот рядом ща с UncleBob обсуждал эту тему, на самом деле мне PHP незнаком, но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное. Цитата sorbena @ постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml можно еще так: в коде aspx например в Global.asax, функция Application_Start выполнить некий код: ' Формат: 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 If Request.FilePath = "/page1.chtml" Then Response.Redirect("/page2.chtml") End If честно сказать ХЗ будет работать или нет, повторюсь , больше нужно информации по структуре сайта. |
Сообщ.
#6
,
|
|
|
Цитата -=VIRUS=- @ Вов, это правда? Мне кажется они одно и то же.. но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное. А вот пример из синтаксиса веб.конфига: <?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> |
Сообщ.
#7
,
|
|
|
Цитата Leprecon @ Вов, это правда? Мне кажется они одно и то же.. Ну в в принципе да, но web.config все-таки побогаче функционалом будет, чем .htaccess. Не берусь сравнивать, но мне так кааца. |
Сообщ.
#8
,
|
|
|
Цитата UncleBob @ Я это и имел в виду.. но web.config все-таки побогаче функционалом будет, чем .htaccess. Не берусь сравнивать, но мне так кааца. Добавлено Цитата -=VIRUS=- @ По моему он бредит. Урл редирект и Page_Load - это как сравнить хищника и травоядного. где его перехватить я не могу тебе ответить не зная структуры сайта, если есть site.master то конечно в нем, к примеру функция Page_Load |
Сообщ.
#9
,
|
|
|
Цитата Leprecon @ По моему он бредит. Урл редирект и Page_Load - это как сравнить хищника и травоядного. Чю это я брежу? я в site.master ловлю url которых не существует, писал класс SiteMap который собственно и следит за тем что находится в строке браузера пользователя, вот код с того сайта что пишу сейчас: ' 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 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 @ И еще вопрос можно ли поставить ошибку на целое представление? опуская остальной функционал, то конечно они идентичны. |
Сообщ.
#10
,
|
|
|
Цитата -=VIRUS=- @ начнем с того что PHP технология изначально отличается, например там нет такого понятия как компиляция, функционал .htaccess отличается от web.config теперь осталось понять про отношение .htaccess к PHP, и мы, возможно, откроем что-то новое |
Сообщ.
#11
,
|
|
|
Цитата -=VIRUS=- @ Ну да, технически можно и так.. Но я бы это назвал ситуацией, когда на грузовике пытаются въехать в гараж для легковушки, понимают что не вмещаются, и едут в другой гараж. Вместо того, чтобы сразу прикинуть какой гараж подходящий. Чю это я брежу? я в site.master ловлю url которых не существует, писал класс SiteMap который собственно и следит за тем что находится в строке браузера пользователя, вот код с того сайта что пишу сейчас: По хорошему, зачем вообще грузить обработчик запроса, если редиректнуть его можно еще на стадии подготовки? Для урл-реврайта обычно пишут HttpModule, который будет перехватывать события приложения, и редиректить запросы на другие урлы. Модуль пишется один раз, и используется для всех сайтов. Пути настраиваются в конфиге, или каком-нить дополнительном файле redirect.sitemap. И в этом случае, сайту даже не надо знать об этом функционале, потому-что это скорее инфраструктура, чем логика. В общем-то и писать ничего не надо, такие модули уже есть. Цитата -=VIRUS=- @ Если же действительно говорить о конкретной ситуации.. если рассуждать с точки зрения, 1. Если редиректить надо несуществующие удаленные страницы, но с определенными адресами, то зачем тогда опять создавать эти страницы? Проще воспользоваться урл-редиректом. 2. Редиректнуть всю ошибку 404 еще проще, я уже написал как. 3. Про представления, я честно говоря не понял, что имеется в виду. Но если речь о расширении *.shtml, все страницы с которым надо редиректнуть, то опять же обработчик не обязателен, достаточно конфига и реврайтинга. Добавлено Для статических адресов есть средство в стандартных модулях через web.config: <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 |
Сообщ.
#12
,
|
|
|
Цитата 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, и мы, возможно, откроем что-то новое тут мне даже ответить нечего Знакомимся с Apache. Я вот сейчас думаю и меня осенило, это намек на то что Apache сервера юзают не только PHP сайты что ль? прежде чем так намикать, читай внимательнее. Ответ был исходя из вопроса автора Цитата sorbena @ На php аналог этого файл .htaccess Добавлено эмм... я несовсем понял что это, у меня даже похожего нечего нет на URL Rewrite, проект в vs.2010 (net4.0), Тип проекта "Веб-приложение ASP.NET" http://www.iis.net/learn/extensions/url-re...-rewrite-module Есть еще вот такое, но мое мне нравится больше |
Сообщ.
#13
,
|
|
|
Цитата -=VIRUS=- @ Ясен пень. Извини, Вов, что за тебя ответил Я вот сейчас думаю и меня осенило, это намек на то что Apache сервера юзают не только PHP сайты что ль? Цитата -=VIRUS=- @ Это не был вопрос автора. Ну как мне кажется. Это была аналогия, с помощью которой автор хотел нам объяснить чего она хочет.прежде чем так намикать, читай внимательнее. Ответ был исходя из вопроса автора Цитата -=VIRUS=- @ на самом деле мне PHP незнаком, но аналога как такого .htaccess нет, есть Web.config но назначение все таки разное. ПХП, в целом ничем от ASP.NET MVC не отличается. Но да, ASP.NET компилируется, а его библиотеки умеют из кода подгружать шаблоны хтмл, вроде aspx. Однако и то и то это "в основном текстовые" обработчики хттп запросов, реализованные с помощью расширений, которые перехватывают определенные запросы, написанных для своих веб-серверов. И так же веб-конфиг это не конфиг параметров одного единственного сайта. Это конфиг и сайта и самого ИИСа. В ИИСе куча плагинов, которые мышкой позволяют делатьнастройки сайта, безопасности, других глобальных параметров, но сохраняют они все в веб.конфиге. Внутри каждой папки ИИСа, есть веб.конфиг. Он наследует все настройки веб.конфигов родительских папок. А рутовый для сайта веб.конфиг наследует настройки машин.конфиг компа. Добавлено Вот тебе ссылка на мое мнение, почитать на досуге, Ниши, занимаемые Java и .NET - дубль два (сообщение #3352790) Добавлено Цитата -=VIRUS=- @ Конечно нет. Это же расширение. Думал догадаешься посмотреть оглавление рядом. Поэтому дал ссылку не на скачивание расширения без хелпа, а на хелп, без ссылки на расширение. http://www.iis.net/learn/extensions/url-re...-rewrite-module Раздел "Where to get the URL Rewrite module". эмм... я несовсем понял что это, у меня даже похожего нечего нет на URL Rewrite, проект в vs.2010 (net4.0), Тип проекта "Веб-приложение ASP.NET" |
Сообщ.
#14
,
|
|
|
Цитата Leprecon @ Это не был вопрос автора. Ну как мне кажется. Это была аналогия, с помощью которой автор хотел нам объяснить чего она хочет. Я другое пытался сказать, пусть будет аналогия и автор нам пыталась объяснить что она хочет, в полне логично что я читая автора вижу "аналогию", отвечаю ей той же аналогией Цитата -=VIRUS=- @ начнем с того что PHP технология изначально отличается ну мы ведь прекрасно понимаем что речь иден не о PHP и ASPX а о IIS и Apache ? я уже на эту херь не первый раз натыкаюсь, тут както пишу "ява" по тексту понятно что реч идет о javascript, он меня спрашивает: ты java то видел? такое ощущение что стой стороны клавы сидит вундеркинд и ему уже скушно тут общаться, или я его действительно уже зае... вопросами, ну реально отвечает только он, если так реагировать, дык он и останется тут единственным "учителем" со школотой возится. И еще момент, уже ко всем относится, народ с большим уважением к Вашему опыту, создается впечатление что метод написания кода всегда шаблонный, если есть какой то вопрос он обязательно должен быть решен тем способом что описано в MSDN, далеко ходить не будем код предложенный lourtoy, не кто даже не разбирался в нем, сразу пошли предложения на MSDN, подключение модулей и.т.д. зачем? писать модули когда это решается простым кодом. // Порождается в начале каждого запроса { 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 @ Конечно нет. Это же расширение. Думал догадаешься посмотреть оглавление рядом. Поэтому дал ссылку не на скачивание расширения без хелпа, а на хелп, без ссылки на расширение. да ну н... это Вы мне рассказывали как из гранатомета по воробьям стрелять? напомню вопрос Цитата sorbena @ Как сделать постраничный 301 редирект с site.ru/page1.chtml на site.ru/page2.chtml ? или поставить 404 ошибку на site.ru/page1.chtml |
Сообщ.
#15
,
|
|
|
Цитата -=VIRUS=- @ Тема слишком обширная или расплывчатая. Но по большей части - да.. Это улучшает модульность, и читаемость для других участников команды. А это почти всегда должны быть главные критерии. А дополнительные библиотеки, да еще с появлением NuGet, я считаю скорее обязаловкой. Ибо придумывать велосипеды - это самое ужастное что делает программист.И еще момент, уже ко всем относится, народ с большим уважением к Вашему опыту, создается впечатление что метод написания кода всегда шаблонный, если есть какой то вопрос он обязательно должен быть решен тем способом что описано в MSDN Цитата -=VIRUS=- @ Я бы тоже не стал называть джаваскрипт джавой. У меня внутри все переворачивается от такого использования слова. тут както пишу "ява" по тексту понятно что реч идет о javascript |