0

したがって、複数の URL に同じコンテンツがある場合、Google がサイトにペナルティを課す可能性があることはわかっています...残念ながら、MVC ではこれはあまりにも一般的example.com/example.com/Home/ありexample.com/Home/Index、3 つの URL すべてで同じページに移動します...どうすればよいでしょうかIndexURLにあるときはいつでも、それがなくても同じものにリダイレクトされ、Indexもちろん同じものにリダイレクトされることを確認しますHome

4

3 に答える 3

1

おそらく、この小さなライブラリが役に立つかもしれません。このライブラリはあなたの場合にはあまり便利ではありませんが、うまくいくはずです。

var route = routes.MapRoute(name: "Default",
                            url: "{controller}/{action}/{id}",
                            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.Redirect(r => r.MapRoute("home_index", "/home/index")).To(route);
routes.Redirect(r => r.MapRoute("home", "/home")).To(route);
于 2013-07-17T20:54:57.453 に答える
0

これを処理する方法は、Index のような既定のページに対して、そのうちの 1 つだけに明示的なルートを作成するだけです。つまり、「example.com/People」は People/Index のルートとなり、URL「/example.com/People/Index」には有効なページがありません。

Home の例は、3 つの異なる URL を持つ可能性があるという点で独特です。この場合も、その Index アクションの「example.com」へのルートを作成するだけで、他の 2 つの URL はサポートしません。つまり、他の形式の URL にリンクすることは決してないため、それらがなくても問題が発生することはありません。

これをサポートするために、AttributeRouting と呼ばれる Nuget パッケージを使用します。ページの GET ルートを指定すると、MVC のデフォルトが上書きされます。

通常は AttributeRouting を使用してインデックスをマップします[GET("")]が、コントローラー名を省略したルート URL もサポートしたい Home の特別なケースでは、IsAbsoluteUrl で追加の属性も追加すると思います。

public class HomeController : BaseController
{
     [GET("")]
     [GET("", IsAbsoluteUrl = true)]
     public ActionResult Index()
     {...
于 2013-07-17T20:40:28.633 に答える
0

だから私は外部ライブラリなしでそれを行う方法を見つけました...

私のRouteConfig場合、これらの 2 つのルートを上部のすぐ下に追加する必要がありました。IgnoreRoute

        routes.MapRoute(
            "Root", 
            "Home/",
            new { controller = "Redirect", action = "Home" }
        );

        routes.MapRoute(
            "Index",
            "{action}/Index",
            new { controller = "Redirect", action = "Home" }
        );

次に、新しくController呼び出されたものを作成する必要があり、次のように他の各 s のRedirectメソッドを作成しました。Controller

public class RedirectController : Controller
{
    public ActionResult Home()
    {
        return RedirectPermanent("~/");
    }

    public ActionResult News()
    {
        return RedirectPermanent("~/News/");
    }

    public ActionResult ContactUs()
    {
        return RedirectPermanent("~/ContactUs/");
    }

    // A method for each of my Controllers
}

これで、私のサイトは合法的に見えます。これ以上のホーム、私の URL のインデックスはありません。これにはもちろん、Indexメソッドのいずれかへのパラメーターを受け入れることができないという制限がありますControllersが、本当に必要な場合は、これを微調整して目的を達成できるはずです。 .

参考までに、インデックス アクションに引数を渡したい場合は、次のように 3 番目のルートを追加できます。

 routes.MapRoute(
            name: "ContactUs",
            url: "ContactUs/{id}/{action}",
            defaults: new { controller = "ContactUs", action = "Index", id = UrlParameter.Optional }
        );

これにより、次のような URL が作成されます。/ContactUs/14

于 2013-07-19T03:06:02.867 に答える