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/

Другие вопросы по тегам