Mvc 301 Redirect yönlendirmesi

  • Mvc 301 Redirect yönlendirmesi

Perşembe, 21.02.2019 23:14  |   MVC  |   barisgelebek  |   1


Mvc 301 Redirect yönlendirmesi

Arama motorları sitenizi tararken WWW ‘li e WWW ‘siz iki ayrı içeriği algılarlar bu da  arama motorları için iki farklı tekrar edilen içeriktir.

Tabi bu durumda da arama motorları tüm sitenizi tekrar eden içerik olarak algılar ve sitenizin bulunabilirliği azalır.

301 Redirect

Yapmanız gereken sitenizin WWW ‘li veya WWW ‘siz sürümden birini seçip gelen istekleri  diğer sürüme yönlendirmektir. Genellikle WWW ‘li sürüm kullanılmaktadır. Bende örnek olarak WWW ‘siz sürümden gelen istekleri WWW ‘li sürüme yönlendireceğim. Bir MvcHandler ile bu işi rahatlıkla yapabiliriz. MvcHandler gelen istekleri kontrol edecek ve istek adresinde WWW yoksa isteği WWW ‘li sürüme yönlendirecek.

MvcHandler'lar Global.asax içinde yaptığımız Route tanımlarına eklenen nesnelerdir. MvcHandler bir Route işlemi çalışırken hangi Controller'ın seçilmesi gerektiğine karar verirler. Bu işlemi yapabilmek için tüm isteklerin başında çalışırlar. Mvc gelen isteğe göre önce hangi Route tanımının çalışması gerektiğine karar verir daha sonra Route içinde tanımlı Handler'larda hangi Controller sınıfının çalışması gerektiğine karar verir. Böyle her hangi bir Router için tüm istekler "Handle" edebileceğiniz yer MvcHandler'dır.

MvcHandler‘ımız aşağıdaki gibidir.

[class]

public class RedirectHandler : MvcHandler
    {
        public RedirectHandler(RequestContext requestContext)
            : base(requestContext) { }

 
        protected override IAsyncResult BeginProcessRequest(
            HttpContext httpContext,
            AsyncCallback callback, object state)
        {

 
            if (!httpContext.Request.Url.AbsoluteUri.Contains("://www."))
            {

 
                httpContext.Response.Status = "301 Moved Permanently";
                httpContext.Response.StatusCode = 301;
                httpContext.Response.AppendHeader(
                    "Location",
                    httpContext.Request.Url.AbsoluteUri
                        .Replace("://", "://www.")
                    );
            }

 
            return base.BeginProcessRequest(
                httpContext, callback, state);
        }
    }

 

Yukarıda RedirectHandler içinde istek olarak gelen adreste www yoksa WWW’li sürüme yönlendirme yaptık. Fakat yönlendirmeden MVC sitemizde ki Route tanımlarına da bu handler’ın gerekli Controller'ı seçmesini göstermeliyiz.

[class]

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("Content/{*pathInfo}");

 
            routes.MapRoute(
                "DefaultController",
                "{controller}/{action}/{id}",
                new {controller = "Home", action = "Index",id=UrlParameter.Optional});

 
            RouteHandler<RedirectHandler>.Assign(RouteTable.Routes);

Global.asax içinde sitemizde bulunan tüm Route tanımlarına RedirectHandler ekledik. Burada kullandığım RouteHandler sınıfı verilen MvcHandler tipini tüm Route tanımlarına eklemekte sorumludur. Yani RouteHandler sınıfı MvcHandler sınıflarını Route listelerine ekleyebilecek yardımcı bir sınıfıdır.

[class]

public class RouteHandler<THttpHandler> : MvcRouteHandler
    where THttpHandler : MvcHandler
    {
        public RouteHandler(IControllerFactory controllerFactory)
            : base(controllerFactory) { }
        public static void Assign(RouteCollection routes)
        {
            using (routes.GetReadLock())
            {

 
                var routeHandler
                    = new RouteHandler<THttpHandler>(
                        ControllerBuilder.Current.GetControllerFactory());

 
                foreach (var route in routes
                    .OfType<Route>()
                    .Where(r => (r.RouteHandler is MvcRouteHandler)))
                {

 
                    route.RouteHandler = routeHandler;
                }
            }
        }
    }

Sonuç

SEO için aynı içeriğin tek bir adresi olması gerekmektedir. Sitemizin WWW’siz adreslerini WWW’li adrese yönlendirmemiz gerekiyor. Bir MvcHandler yazarak bu işlemi gerçekleştirdik. Mvc sitemizde bulunan tüm Router tanımlarına bu handler'ı ekledik. Bu örnekte tüm isteklerde çalışacak bir MvcHandler yazmayı ve sitemizin Router tanımlarına eklemeyi gördük. Ayrıca SEO için önemli bir problemi de çözmüş olduk. Ayrıca 301 Redirect mekanizması sadece adrese WWW eklemek için kullanılmaz. Eski adresin yeni adrese yönlendirilmesi işleminde de kullanılır.

 

AYRICA FAYDALI BULDUYSANIZ AŞAĞIDAKİ LİNK ARACILIĞI İLE BANA BİR KAHVE ISMARLAYABİLİRSİNİZ.

https://www.patreon.com/barisgelebek


Yorumlar
Muhammed 31.05.2018
Harika çözüme sayenizde ulaştım. Çalışıyor :)


Yorum Yazınız:
Arama