Asp.Net MVC 301 Redirects
Мы привыкли использовать ISAPI Re-Write (Infact все еще находится на нашем сервере), хотя он не работает с ASP.Net MVC (что-то связанное с 'euxd' get param).
Нам нужен надежный способ реализации простых перенаправлений 301, когда мы меняем структуру сайта, загружаем новый сайт и т. Д. Есть предложения?
Хорошо, я хотел перенаправить /SomeFolder/SomePage.HTML?Param1=X в /NewPage/X
Как мы можем сделать это?
5 ответов
Если вы используете IIS7, я бы рекомендовал использовать официальный модуль IIS7 URL Rewrite.
В MVC 3 есть три новых метода перенаправления, которые могут использоваться в контроллерах для перенаправления навсегда (производят 301); в отличие от 302-х (временная переадресация), создаваемых перенаправлениями MVC 2.
- RedirectPermanent
- RedirectToActionPermanent
- RedirectToRoutePermanent
public ActionResult OldAction() { return RedirectPermanent(urlname); }
В разделе " Контроллеры " этих пошаговых руководств по PluralSight есть отличное руководство.
Чтобы выполнить перенаправление со страницы, не относящейся к MVC, к действию контроллера MVC, лучше всего использовать библиотеку типа UrlRewriting.net или аналогичную, которая использует HttpModule для обработки каждого запроса и отправки его в определенное место.
Пример: перенаправить запросы для '/faq.asp' на '/faq':
<add name="faq.asp" virtualUrl="^~/faq.asp([\?#].*)?$"
destinationUrl="~/faq"
redirect="Application"
redirectMode="Permanent"
ignoreCase="true" />
Когда вы добавляете HttpModule, который включает UrlRewriting.Net в ваш Web.config, убедитесь, что вы определили его до UrlRoutingModule, который автоматически определяется ASP.NET. В противном случае ASP.NET попытается обработать ваш запрос, сопоставив его с файлом или контроллером, и в результате могут возникнуть непредвиденные проблемы.
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
Я только что написал в блоге о простом решении, которое использует ASP.NET MVC и файл XML для хранения сопоставлений перенаправления 301.
Тем не менее, согласно ответу Натана Тейлора, если вам нужно сделать отображение на основе регулярных выражений, я бы предложил использовать UrlRewriting.Net.
Реализуйте пользовательский ActionResult. Пример: http://www.stum.de/2008/10/22/permanentredirectresult/