2015-04-06 36 views
0

好的,我應該知道這一點......但是......我伸出手來,因爲我把頭撞在牆上。將區域的默認動作重定向到單個網址

有一個MVC區域,我們稱之爲「商店」。有一個控制器,我們稱之爲「家」。有一個動作,我們稱之爲「索引」。以下URL彈出一個網頁:

/存儲/首頁/指數

/存儲/家庭/

對於搜索引擎優化的目的,我想對其進行限制「/存儲/家/」 。如何做到這一點?

+0

你試過嗎? http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#route-areas – Yogiraj 2015-04-06 02:34:15

回答

0

如果您已經使用此URL釋放了您的網站,則正確的方法是使用301重定向。這是確保與/store/home/index路線的任何鏈接都不會立即成爲死鏈接並因此停止計入您的SEO分數的唯一方法。這可以使用URL rewrite module of IIS完成。

或者,您可以將canonical tag添加到指向/store/home/網址的頁面指向。

但是,如果您尚未發佈該網站,則可以添加直接進入自定義404頁面的路線。

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Store_Non_Match", 
     "store/home/index", 
     new { controller = "System", action = "Status404"} 
    ).DataTokens["area"] = ""; 

    context.MapRoute(
     "Store_default", 
     "store/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

然後在您的站點中,使系統控制器返回404頁面和狀態。

public class SystemController : Controller 
{ 
    // 
    // GET: /System/Status301/?url=(some url) 

    public ActionResult Status301(string url) 
    { 
     Response.CacheControl = "no-cache"; 
     Response.StatusCode = (int)HttpStatusCode.MovedPermanently; 
     Response.RedirectLocation = url; 

     ViewBag.DestinationUrl = url; 
     return View(); 
    } 

    // 
    // GET: /not-found 

    public ActionResult Status404() 
    { 
     Response.CacheControl = "no-cache"; 
     Response.StatusCode = (int)HttpStatusCode.NotFound; 

     return View(); 
    } 
} 

注意上面的控制器還演示瞭如何在應用程序中使用301重定向作爲IIS重寫模塊的替代方法。如果你知道你會隨着時間的推移退出,並且你想從應用程序中的一個動作中自動執行,那麼這很方便。並非所有的瀏覽器都遵守301重定向,所以我的解決方案是返回一個視圖,該視圖嘗試在5秒後執行JavaScript和元刷新重定向,如果其他所有瀏覽器都失敗,則會有超鏈接指向用戶可以點擊的頁面。

// Status301.cshtml 
@{ 
    ViewBag.Title = "Page Moved"; 
} 
@section MetaRefresh { 
    <meta http-equiv="refresh" content="5;@ViewBag.DestinationUrl" /> 
} 

<h2 class="error">Page Moved</h2> 

This page has moved. Click this link if you are not redirected in 5 seconds: <a href="@ViewBag.DestinationUrl">@ViewBag.DestinationUrl</a>. 

<script> 
    //<!-- 
    setTimeout(function() { 
     window.location = "@ViewBag.DestinationUrl"; 
    }, 5000); 
    //--> 
</script> 
相關問題