.htaccess ile 301 Yönlendirme Nasıl Yapılır?
301 yönlendirmesi, bir URL’nin kalıcı olarak başka bir adrese taşındığını tarayıcılara ve arama motorlarına bildirir. Alan adı değişikliği, sayfa adresi güncellemesi, HTTP’den HTTPS’ye geçiş veya eski içeriklerin birleştirilmesi gibi durumlarda kullanılır. Yanlış bir kural yönlendirme döngüsüne, erişim hatasına veya çok sayıda kırık bağlantıya neden olabileceği için .htaccess dosyasını değiştirmeden önce mutlaka yedek alın.
301 Yönlendirmesi Ne Zaman Kullanılmalı?
- Bir sayfanın adresi kalıcı olarak değiştiğinde
- Eski bir içerik daha kapsamlı bir içerikle birleştirildiğinde
- Alan adı veya alt alan adı kalıcı olarak taşındığında
- HTTP ve HTTPS ya da www ve www olmayan sürümler tek adreste birleştirildiğinde
Geçici bakım veya kısa süreli kampanya yönlendirmelerinde 301 yerine ihtiyaca göre 302 ya da 307 değerlendirilmelidir.
Başlamadan Önce
.htaccess dosyası genellikle sitenin belge kök dizininde bulunur. Dosyanın bir kopyasını indirin ve kuralları mümkünse test ortamında deneyin. WordPress kullanıyorsanız özel yönlendirme kurallarını # BEGIN WordPress satırından önce eklemek, WordPress’in otomatik olarak yönettiği bölümü korumaya yardımcı olur.
Tek Bir Sayfayı Redirect ile Yönlendirme
Basit ve sabit bir URL taşıması için Apache mod_alias modülündeki Redirect direktifi kullanılabilir:
Redirect 301 /eski-sayfa https://example.com/yeni-sayfa
Bu yöntem tekil ve basit yönlendirmeler için okunaklıdır. Aynı işlemde Redirect ve RewriteRule kurallarını karıştırmak işlem sırası nedeniyle beklenmeyen sonuçlar doğurabilir; mümkünse bir yönlendirme görevi için tek yöntem seçin.
Tek Bir Sayfayı RewriteRule ile Yönlendirme
Koşul veya düzenli ifade gerekiyorsa mod_rewrite kullanılabilir:
RewriteEngine On
RewriteRule ^eski-sayfa/?$ /yeni-sayfa [R=301,L]
R=301 kalıcı yönlendirmeyi, L ise kural eşleştiğinde o turdaki diğer kuralların işlenmemesini belirtir.
Bir Klasörü Yeni Adrese Taşıma
RewriteEngine On
RewriteRule ^eski-kategori/(.*)$ /yeni-kategori/$1 [R=301,L]
Bu örnekte /eski-kategori/urun-a isteği /yeni-kategori/urun-a adresine taşınır. Kuralı kullanmadan önce hedef klasör yapısının gerçekten aynı olduğundan emin olun.
Eski Alan Adını Yeni Alan Adına Yönlendirme
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?eski-domain.com$ [NC]
RewriteRule ^(.*)$ https://yeni-domain.com/$1 [R=301,L]
Bu yapı URL yolunu korur. DNS kayıtlarının ve yeni alan adındaki SSL sertifikasının hazır olması gerekir. Alan adı taşımasında yalnızca ana sayfaya yönlendirmek yerine her eski URL’yi en yakın yeni karşılığına göndermek daha doğru kullanıcı deneyimi sağlar.
HTTP Trafiğini HTTPS’ye Yönlendirme
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Sunucu bir proxy veya CDN arkasındaysa HTTPS bilgisi farklı bir başlık üzerinden iletilebilir. Bu durumda sağlayıcınızın önerdiği kural kullanılmalıdır; aksi halde yönlendirme döngüsü oluşabilir.
www Sürümünü www Olmayan Adrese Yönlendirme
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
Tersi tercih ediliyorsa kural alan adınıza göre uyarlanmalıdır. Canonical etiketi, WordPress site adresi ve Search Console ayarları da seçilen sürümle tutarlı olmalıdır.
Sorgu Parametreleri Nasıl Davranır?
RewriteRule yönlendirmelerinde mevcut sorgu dizesi çoğu durumda hedefe aktarılır. Eski parametrelerin hedefte kullanılmaması gerekiyorsa Apache 2.4 üzerinde QSD bayrağı kullanılabilir:
RewriteRule ^eski-sayfa/?$ /yeni-sayfa [R=301,L,QSD]
Sık Yapılan Hatalar
- Yönlendirme döngüsü: Kaynak ve hedef koşulları birbirini tekrar tetikliyor olabilir.
- 500 hatası: Yazım hatası, desteklenmeyen direktif veya eksik Apache modülü bulunabilir.
- Yönlendirme zinciri: A adresi B’ye, B adresi C’ye gidiyorsa A doğrudan C’ye yönlendirilmelidir.
- Alakasız hedef: Tüm eski sayfaları ana sayfaya yönlendirmek yerine konu bakımından en yakın hedef seçilmelidir.
- Önbellek: Tarayıcı, CDN veya WordPress önbelleği eski sonucu göstermeye devam edebilir.
Yönlendirme Nasıl Test Edilir?
Yönlendirmeyi gizli tarayıcı penceresinde kontrol edebilir veya HTTP başlıklarını komut satırından inceleyebilirsiniz:
curl -I https://example.com/eski-sayfa
İlk yanıtta 301 durum kodunu ve doğru Location başlığını görmelisiniz. Hedef URL’nin de 200 OK döndürdüğünü doğrulayın. Site genelini etkileyen kurallardan sonra önemli sayfaları ve satın alma bağlantılarını ayrıca test edin.
Direktiflerin güncel davranışı için Apache mod_alias ve Apache mod_rewrite belgelerini inceleyebilirsiniz.
