21 Temmuz 2018 Cumartesi
Twitter

ASP.NET ile 301 yönlendirmesi

301 / 302 yönlendirmeleri ile ilgili bir yazı...

Web uygulamalarımızda, bir sayfadan bir başka sayfaya gitmek için sıklıkla Response.Redirect(..) metodunu kullanırız.

Response.Redirect(...) metodu aslında tarayıcıya Geçici Yönlendirme (HTTP 302 - Temporary Redirect) bilgisi göndermektedir. Böylece tarayıcımız, belirttiğimiz sayfadan akışa devam eder.

Response.Redirect("YeniSayfa.aspx");

Ancak bu durum arama motorları için özel bir anlam taşır. Crawler uygulamaları (Arama motorlarının web sitelerini indexlemeye yarayan uygulamaları), HTTP 302 yönlendirmesini gördüğü zaman kendi akışına yeni sayfadan devam etmez. Adı üstünde Geçici Yönlendirme, neden yeni sayfadan devam etsin ki :)

Peki bu durumda ne yapmamız gerekiyor. Yönlendirme esnasında tarayıcıya HTTP 302 değil, HTTP 301 bilgisini göndermemiz gerekli.

HTTP 301 yönlendirmesi ile tarayıcıya Kalıcı Olarak Taşındı (HTTP 301 - Moved Permanently) bilgisi gönderilir ve Crawlerlar, HTTP 301 mesajını görünce kendi akışlarına yeni sayfadan devam ederler. Bu sayede tüm web sitemiz indexlenebilecektir.

Ancak bu noktadaki sıkıntı, bu yönlendirmeyi direkt yapacak bir Response.???() metodunun olmayışı. (VS 2008 için söylüyorum)

Aşağıdaki kodlar aracılığıyla HTTP 301 - Moved Permanently yönlendirmesi yapılmaktadır.

Response.Status = "301 Moved Permanently";
Response.StatusCode = 301;
Response.RedirectLocation = "YeniSayfa.aspx";
Response.End();

VS 2010'da bu satırlar tek satıra indirgenmiş durumda:

Response.RedirectPermanent("YeniSayfa.aspx"); 

301 redirect

Hadi kardeş teknolojiler için de yönlendirme kodlarını yazayım:

ASP için;

Response.Status="301 Moved Permanently";
Response.AddHeader("Location","YeniAdres.asp");

PHP için;

Header( "HTTP/1.1 301 Moved Permanently" ); 
Header( "Location: yeni-adres.php" ); 

Diğer HTTP Statuc Codelarını görmek için buraya tıklayabilirsiniz.

Bir yönlendirme sonunda tarayıcıya gönderilen bilgiyi görmek için güzel bir adres: http://dalt.in/Wq3f2

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 4,75 (4 oy)
Yazıdaki kodların kalitesi Puan: 4,80 (4 oy)
İhtiyaca cevap verme Puan: 4,86 (4 oy)
Tavsiye edilebilirlik Puan: 4,74 (4 oy)
Genel değerlendirme Puan: 4,65 (4 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumları
  • Facebook Yorumları Facebook Yorumları
Yeni yorum yaz Toplam: 7, Onay bekleyen: 0.
  1. Mustafa

    Hocam merhaba Sitede url yapısı değiştiyse 301 yönlendirmesinde nasıl bir yol izleyebiliriz? Sitede diyelim 1000 adet makale mevcut. onceki url xsite.com/192-meyve-kalorileri.html Yeni url : xsite.com/meyve-kalorileri-ve-faydalari.html Bu durumda 200 adet değişmiş url olduğunu var sayarsak Hepsini tek tek tespit edip yeni url ye yönlendirme mi yapacağız linklerin indexlenmesini kaybetmemek için? Sabit bir değişiklik olmadığını için baştaki 192 gibi id den okuduğumuz değeri kaldırarak raw url yi okuyup RedirectLocation yapabiliriz fakat bazı url lerde yukarıdak gibi xsite.com/meyve-kalorileri-ve-faydalari.html ekstra eklenmiş url leri nasıl tespit edip yönlendirme yapabiliriz? Pek mümkün değil gibi geliyor ( tek tek uğraşmazsan)

    • Devrim Altınkurt

      merhaba, benzer durumu ben de yaşadım.
      eskiden
      https://www.daltinkurt.com/Yazi-Kategori/1/ASP-NET.aspx
      olan url leri
      https://www.daltinkurt.com/ASP-NET/
      olarak değiştirdim.

      yaptığım iş .htaccess dosyasına şu satırı eklemek oldu:
      RewriteRule ^Yazi-Kategori/(\d+)/(.*).aspx /$2/ [R=301,L]

      satırın sonundaki R=301 yönlendirmesi `Redirect Permanent` demek. yani kalıcı olarak yönlendirmek demektir.

      google sonuçlarından da eski url ler zaman içerisinde silindi.

      kolay gelsin.

  2. Sertan Özcan

    Merhaba. Sormak istediğim bir şey var. Asp.NET uygulamamda 301 yönlendirmesini yönetim panelinden yapabiliyorum. Fakat yapılmış bir 301 yönlendirmesini nasıl iptal edebilirim? Deneme olarak bir yönlendirme yaptım ama ne yaptıysam bunu iptal edemedim. Yine 301 yönlendirmesi ike orjinal url ye mi yönlendirmeliyim? 301 clear gibi bir şey var mıdır? Saygılar. İyi çalışmalar.

  3. ekrem

    genelislemler.cs ye şunu ekledim :)

    public static void SayfaYonlendir(string Sayfa)
    {

    HttpContext.Current.Response.Status = `301 Moved Permanently`;
    HttpContext.Current.Response.StatusCode = 301;
    HttpContext.Current.Response.RedirectLocation = Sayfa;
    HttpContext.Current.Response.End();
    }

  4. Devrim Altınkurt

    Dostum istediğin yere yazabilirsin. Nerede, ne zaman istersen :=)

  5. Tgb

    Peki ama bunu nereye yazacagız? Globalasax dosyasının içerisine mi yoksa her sayfanın kendi içerisine mi yoksa kod kısmına mı ? :S