- Konu sahibi
- #1
301 yönlendirmesi, taşınan bir URL’nin yeni adresine kalıcı olarak gönderilmesidir.
Eski yol ile yeni adres arasında doğrudan eşleşme varsa en kısa yöntem
Örneğin:
Basit bir dizin taşınmasında da aynı yaklaşım kullanılabilir:
Bu kural, eski kategorinin altındaki yolları yeni kategori önekiyle eşleştirir. Tekil dosya eşleşmesi veya daha karmaşık desen gerekiyorsa
URL’nin bir bölümünü koruyarak yönlendirme yapmak için, web kök dizinindeki
Örneğin
Apache’nin güncel belgelerinde basit URL işlemleri için
Hedef HTTPS kullanıyorsa sertifika ve hedef sayfa yönlendirmeden önce çalışmalıdır. TLS bir proxyde sonlanıyorsa arka sunucunun HTTPS algısı farklı olabilir; bu durumda güvenilir proxy ve origin yapılandırması doğrulanmadan HTTPS koşulu eklemeyin.
İhtiyacı belirleyerek gereksiz karmaşıklığı önleyebilirsiniz:
En yaygın sorunlardan biri, hedef adresin de aynı genel kurala uymasıdır. Örneğin her isteği
Bir başka hata, basit bir
.htaccess içinde tek bir yol veya ortak bir dizin için Redirect 301, koşul, alan adı, protokol ya da değişken URL parçaları gerektiğinde mod_rewrite kullanılır. Kalıcı kurala geçmeden önce 302 ile test etmek yararlıdır; ancak 301 yanıtı istemci ve ara katmanlarda önbelleğe alınabileceği için test sonrasında eski önbellek etkilerini de hesaba katın.Tek bir URL’yi yönlendirme
Eski yol ile yeni adres arasında doğrudan eşleşme varsa en kısa yöntem
Redirect yönergesidir:
Kod:
Redirect 301 /eski-sayfa https://example.com/yeni-sayfa
Örneğin:
Kod:
Redirect 301 /urunler/eski-model https://example.com/urunler/yeni-model
.htaccess içinde eski yol / ile başlamalıdır. Redirect, belirtilen yolun altındaki ek yolu da hedefe taşıyabilir. Bu nedenle /blog için yazılan genel bir kural, /blog/yazi gibi alt yolları da etkileyebilir. Yalnızca belirli bir URL’yi değiştirmek istiyorsanız yolun kapsamını ve olası alt yolları mutlaka kontrol edin.Basit bir dizin taşınmasında da aynı yaklaşım kullanılabilir:
Kod:
Redirect 301 /eski-kategori/ https://example.com/yeni-kategori/
Bu kural, eski kategorinin altındaki yolları yeni kategori önekiyle eşleştirir. Tekil dosya eşleşmesi veya daha karmaşık desen gerekiyorsa
RedirectMatch ya da mod_rewrite değerlendirilmelidir.Desen ve koşul gerektiren yönlendirmeler
URL’nin bir bölümünü koruyarak yönlendirme yapmak için, web kök dizinindeki
.htaccess dosyasında şu yapı kullanılabilir:
Kod:
RewriteEngine On
RewriteRule ^eski-kategori/(.*)$ https://example.com/yeni-kategori/$1 [R=301,L]
Örneğin
/eski-kategori/urun isteği /yeni-kategori/urun adresine gider. .htaccess bağlamında RewriteRule deseni genellikle başlangıç / işareti olmadan yazılır. [R=301,L] dış yönlendirme üretir ve mevcut kural turunda başka RewriteRule yönergelerinin işlenmesini durdurur.Apache’nin güncel belgelerinde basit URL işlemleri için
Redirect veya RedirectMatch, sorgu dizesi ya da daha karmaşık koşullar için mod_rewrite önerilir. Aynı kapsamda iki modülü gereksiz biçimde karıştırmak, kuralların hangi sırayla uygulandığını anlamayı zorlaştırabilir.Hedef HTTPS kullanıyorsa sertifika ve hedef sayfa yönlendirmeden önce çalışmalıdır. TLS bir proxyde sonlanıyorsa arka sunucunun HTTPS algısı farklı olabilir; bu durumda güvenilir proxy ve origin yapılandırması doğrulanmadan HTTPS koşulu eklemeyin.
Yöntem seçimini kolaylaştırma
İhtiyacı belirleyerek gereksiz karmaşıklığı önleyebilirsiniz:
| İhtiyaç | Uygun yöntem | Dikkat |
|---|---|---|
| Basit yol veya dizin taşıma | Redirect 301 | Alt yolların hedefe eklenmesi |
| Tam yol eşleştirme | RedirectMatch | Deseni başlangıç/bitiş ile sınırlama |
| Değişken yol veya sorgu koşulu | mod_rewrite | Dizin bağlamı ve sorgu dizesi davranışı |
Uygulama ve test adımları
- Mevcut
.htaccessdosyasının yedeğini alın. Dosyanın, yönlendirmek istediğiniz alan adı ve dizin için gerçekten kullanılan web kökünde bulunduğunu doğrulayın. - Eski URL’nin, yeni URL’nin ve varsa sorgu parametrelerinin nasıl davranacağını yazılı olarak belirleyin.
- Kuralı ilk denemede
[R=302,L]ile test edin. Böylece kalıcı yönlendirme önbelleğiyle uğraşmadan sözdizimi ve hedefi kontrol edebilirsiniz. - Gizli tarayıcı penceresinde eski URL’yi açın. Yanıtın gerçekten 3xx olduğunu ve hedefe gereksiz ara adres olmadan ulaştığını kontrol edin.
- Yeni adresin 200 gibi beklenen bir yanıt verdiğini ayrıca doğrulayın; yalnızca yönlendirme görülmesi hedef sayfanın çalıştığı anlamına gelmez.
- Sonuç doğruysa 302 değerini 301 yapın ve eski URL’den yeni URL’ye, yeni URL’den de tekrar eski URL’ye dönüş olmadığını test edin.
Sık yapılan hatalar
.htaccess dosyalarının kullanılabilmesi sunucu yapılandırmasına bağlıdır. AllowOverride izinleri uygun değilse dosya yok sayılabilir veya kullanılan yönergeler 500 hatasına neden olabilir. mod_rewrite kuralları için ilgili modülün etkin olması da gerekir.En yaygın sorunlardan biri, hedef adresin de aynı genel kurala uymasıdır. Örneğin her isteği
/yeni-sayfa adresine gönderen bir kural, hedef adresi ayırt etmiyorsa döngü oluşturabilir. Genel kuralları daraltın; gerekiyorsa RewriteCond ile kaynak yolu veya alan adını açıkça sınırlayın.Bir başka hata, basit bir
Redirect işi için uzun ve birbiriyle çakışan RewriteRule kuralları yazmaktır. Önce en basit çalışan yöntemi seçin. Birden fazla kural kullanıyorsanız daha özel yolları genel kurallardan önce değerlendirin ve eski URL’nin doğrudan son hedefe gitmesini sağlayın.