2013-06-07 9 views
30

Jak dodać trasę do pliku RouteConfig.cs w aplikacji ASP.NET MVC 4, aby wykonać stałe przekierowanie 301 na inną trasę?ASP.NET MVC 4 - 301 Przekierowania w RouteConfig.cs

Chciałbym, aby różne trasy wskazywały na tę samą akcję kontrolera - wydaje się, że 301 byłoby najlepszą praktyką w tym zakresie, szczególnie w przypadku SEO?

Dzięki.

+0

Chyba ta odpowiedź może mieć jakąś wartość http://stackoverflow.com/a/7664217/1236044 – jbl

+0

możliwe duplikat [Jak zrobić przekierowanie 301 permanant trasy w ASP.Net MVC] (http://stackoverflow.com/questions/2216890/how-do-you-do-a-301-permanant-redirect-route-in-asp-net-mvc) – JNF

Odpowiedz

45

Musisz użyć RedirectPermanent, oto przykład:

public class RedirectController : Controller 
{ 

    public ActionResult News() 
    { 

     // your code 

     return RedirectPermanent("/News"); 
    } 
} 

w globalnej asax:

routes.MapRoute(
     name: "News old route", 
     url: "web/news/Default.aspx", 
     defaults: new { controller = "Redirect", action = "News" } 
    ); 
+0

dzięki - więc to jest automatycznie stałym przekierowaniem? Jak byś powiedział, że jest tymczasowy? – niico

+0

RedirectStandent (adres URL) dodaje 301 jako kod statusu, Przekierowanie (adres URL) to proste przekierowanie –

+0

ahh, więc muszę utworzyć kontroler? Nie mogę zrobić tego po prostu z RouteConfig.cs? (lub global.asax) – niico

25

Wiem, że specjalnie zapytał, jak to zrobić na RouteConfig, ale można również wykonaj to samo, używając IIS Rewrite Rules. Reguły działają na twoim web.config, więc nie musisz nawet używać IIS do tworzenia reguł, możesz po prostu dodać je do web.config i będziesz poruszał się z aplikacją we wszystkich twoich środowiskach (Dev, Staging, Prod, itp.) i utrzymuj swój RouteConfig w czystości. To wymaga modułu IIS do zainstalowania na IIS 7, ale uważam, że jest preinstalowany w wersji 7.5+.

Oto przykład:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Redirect t and c" stopProcessing="true"> 
        <match url="^terms_conditions$" /> 
        <action type="Redirect" url="/TermsAndConditions" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
+8

Świetna odpowiedź! Zalecam dodanie 'redirectType =" Permanent "' na końcu znacznika 'action', aby było oczywiste, że jest przekierowaniem 301. – Theophilus

Powiązane problemy