Araç ne yapar, kim kullanır?

Site taşıma, URL yapısını değiştirme veya silinen sayfaları yenilerine bağlama sırasında her eski adres için doğru bir kalıcı yönlendirme gerekir. Araç, kaynak yol ve hedef URL çiftlerinden Apache ve LiteSpeed sunucuların anladığı RewriteRule satırları üretir. Aynı kaynağın iki hedefe gitmesini, kendine yönlendirmeyi, döngüleri ve gereksiz zincirleri üretimden önce yakalar. WordPress sitesini yeni kalıcı bağlantı yapısına geçiren geliştiriciler, Hostinger gibi paylaşımlı hostingde çalışan site sahipleri ve taşıma planı hazırlayan SEO uzmanları için tasarlandı.

Nasıl kullanılır?

  1. Tek bir yönlendirme için “Tekli” modunda /eski-sayfa gibi kaynak yolu ve mutlak hedef URL’yi girin; 301 veya 302 ile query davranışını seçin.
  2. Çok sayıda adres için “Toplu (CSV)” moduna geçin; tabloyu yapıştırın veya en fazla 1 MiB boyutunda UTF-8 CSV dosyası seçin.
  3. Site alan adını girin. Döngü denetimi hangi hedeflerin sizin sitenizde olduğunu bu alandan anlar.
  4. İsterseniz HTTPS ve ana alan adı zorlamasını açıp sunucu ortamını seçin.
  5. “Kuralları oluştur” düğmesine basın, hata ve uyarıları okuyun, çıktıyı kopyalayın ya da indirin.

Üretim kuralları: yalnız tam yol eşleşmesi

Kaynak alanı regex değildir. Yol önce percent-encoding çözülerek ve NFC biçimine getirilerek normalize edilir, ardından bütün regex metakarakterleri kaçırılır. Kök .htaccess bağlamında Apache yolu baştaki / olmadan eşleştirdiği için bu karakter kaldırılır ve kalıp ^…$ ile sabitlenir. Böylece /eski kuralı /eski-extra adresini yakalamaz, /a.b içindeki nokta herhangi bir karakter anlamına gelmez.

  • Kaynakta query, fragment, %2F, %5C, kontrol karakteri ve %252F gibi belirsiz çift encoding reddedilir.
  • /ışık ile /%C4%B1%C5%9F%C4%B1k aynı kaynak kabul edilir ve aynı kuralı üretir.
  • Hedef mutlak HTTP/HTTPS olmalıdır; fragment kabul edilmez. Hedef encode edilmiş biçimde yazılır ve NE bayrağıyla ikinci kez encode edilmez.
  • Zincir varsa uyarı verilir, fakat hedefler otomatik değiştirilmez.

301 ve 302 farkı

301 kalıcı taşımayı bildirir; arama motorları zamanla yeni adresi esas alır ve tarayıcılar yanıtı uzun süre önbelleğe alabilir. 302 geçici yönlendirmedir; kampanya veya bakım sayfası gibi eski adresin geri döneceği durumlar için uygundur. Kalıcı taşımada 302 kullanmak yeni adresin benimsenmesini geciktirebilir.

CSV ile toplu yönlendirme ve açıklamalı örnek

CSV sütunları source,target,status,query sırasındadır; başlık satırı isteğe bağlıdır. Boş status 301, boş query koru anlamına gelir. Virgül içeren alanları çift tırnak içine alın. Noktalı virgülle ayrılmış Excel dışa aktarımları için ayırıcıyı değiştirin. En fazla 500 satır işlenir; sınır aşıldığında satırlar kırpılmaz, hata verilir.

source,target,status,query
/eski-hizmet,https://www.example.com/hizmetler/,301,keep
/ışık-ürünleri,https://www.example.com/aydinlatma/,301,drop

Site alan adı www.example.com ve HTTPS zorlaması açıkken yukarıdaki tablo aşağıdaki bloğu üretir. İkinci kural QSD taşıdığı için /ışık-ürünleri?renk=beyaz isteği query olmadan yeni adrese gider. Yol kuralları host bloğundan önce geldiği için http://example.com/eski-hizmet isteği tek adımda son adrese ulaşır.

# BEGIN Redirects
# Place this block above "# BEGIN WordPress" in the site root .htaccess.
<IfModule mod_rewrite.c>
RewriteEngine On

# Exact-path redirects
RewriteRule ^eski-hizmet$ https://www.example.com/hizmetler/ [R=301,L,NE]
RewriteRule ^ışık-ürünleri$ https://www.example.com/aydinlatma/ [R=301,L,NE,QSD]

# HTTPS + canonical host (TLS terminates on this server)
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
</IfModule>
# END Redirects

Query string davranışı

Kurallar Apache RewriteRule bayraklarına göre yazılır:

Query seçeneğine göre sonuç
SeçimHedefte querySonuç
KoruYokOrijinal query aynen eklenir; bayrak gerekmez.
KoruVarHedefin query’si kazanır, orijinal query eklenmez; QSA ile birleştirme yapılmaz.
KaldırYok veya varQSD bayrağı orijinal query’yi siler; hedefte query varsa o kalır.

WordPress bloğu ve kural sırası

WordPress, # BEGIN WordPress ile # END WordPress arasındaki bloğu kalıcı bağlantı ayarları kaydedildiğinde yeniden yazar. Üretilen bloğu bu satırın üstüne yapıştırın; içine eklenen satırlar kaybolabilir. Ayrıca WordPress bloğu bütün istekleri index.php dosyasına gönderdiği için yönlendirmeler ondan önce çalışmalıdır. Bir yönlendirme eklentisi de kullanıyorsanız aynı adresi iki yerde tanımlamayın.

Hostinger, LiteSpeed ve Cloudflare

“Doğrudan HTTPS” modu %{HTTPS} değişkenini kullanır ve TLS’in bu sunucuda sonlandığı kurulumlar içindir. Sunucu bir proxy arkasındaysa bu değişken her zaman kapalı görünebilir ve sonsuz döngü oluşur. Proxy modu X-Forwarded-Proto başlığına güvenir; bu yüzden yalnız başlığı güvenilen proxy ayarlıyorsa ve sunucuya doğrudan erişilemiyorsa seçilmelidir. Hedef host her zaman sizin girdiğiniz alan adıdır, doğrulanmamış %{HTTP_HOST} hedefte kullanılmaz.

Cloudflare’in Flexible SSL modunda Cloudflare sunucuya HTTP ile bağlanır; sunucudaki HTTPS zorlaması ziyaretçiyi yeniden HTTPS’e gönderir ve döngü başlar. Full (strict) modu ve geçerli bir sertifika kullanın. Hostinger’ın LiteSpeed sunucuları .htaccess kurallarını okur, ancak davranış sürüme göre değişebilir; kuralları önce bir test dizininde deneyin.

Geri alma ve sık hatalar

  • Değişiklikten önce mevcut .htaccess dosyasının yedeğini alın. Sorun çıkarsa yedeği geri yükleyin veya eklenen bloğu # BEGIN Redirects ile # END Redirects arasından silin.
  • Tarayıcılar 301 yanıtını önbelleğe alır; test sırasında gizli pencere veya curl -I kullanın.
  • 500 hatası genellikle yazım hatası ya da kapalı mod_rewrite anlamına gelir; sunucu hata günlüğüne bakın.
  • Araç çıktıyı yalnız tarayıcınızda üretir, sunucunuza bağlanmaz ve kuralları canlı ortamda doğrulamaz.

Sık sorulan sorular

Üretilen kodu nereye yapıştırmalıyım?

Site kök dizinindeki .htaccess dosyasına, # BEGIN WordPress satırının üstüne yapıştırın. Alt dizindeki bir .htaccess dosyası yolları farklı eşleştirir; bu çıktı kök dizin için üretilir.

Regex ile toplu kalıp yazabilir miyim?

Bu sürüm yalnız tam yol eşleşmesi üretir. Kaynaktaki bütün özel karakterler kaçırılır; * veya (.*) yazmak joker değil, gerçek karakter anlamına gelir.

Eski adresteki UTM parametreleri korunur mu?

“Koru” seçiliyse ve hedefte query yoksa orijinal query string olduğu gibi yeni adrese eklenir. Hedefte kendi query’si varsa hedefin query’si kullanılır.

Neden döngü hatası alıyorum?

Tabloda A adresi B’ye, B adresi de A’ya gidiyorsa ya da bir adres kendisine yönleniyorsa kural sonsuz döngü üretir. Hedef başka bir alan adındaysa site alan adı alanını doldurun; araç o hedefleri sitenin dışında sayar.

Yönlendirmeyi nasıl test ederim?

Dosyayı yükledikten sonra curl -I https://alanadiniz.com/eski komutuyla Location başlığını ve durum kodunu kontrol edin. Query içeren bir adresi de ayrıca deneyin.

Yayın: · Güncelleme: