- Konu sahibi
- #1
SEO uyumlu URL oluşturmak için
Web kök dizinine aşağıdaki
Aynı dizinde, kuralın hedefini gerçekten karşılayan en küçük
Bu örnekte tarayıcı SEO URL’sini görür.
Kural yazarken işlemin tarayıcıya mı bildirileceğini, yoksa yalnızca sunucu içinde mi yapılacağını ayırmak önemlidir.
Eski adresler arama motorlarında veya dış bağlantılarda kullanılıyorsa
Kök dizindeki basit kurallarda çoğu zaman zorunlu değildir. Alt dizinde göreli hedefler kullanıyorsanız ve URL öneki doğru oluşmuyorsa
Dosya veya kaynak türüne göre tek bir biçim seçin. Hem eğik çizgili hem eğik çizgisiz biçimi içerik döndürecek şekilde açık bırakmak yerine bir biçimi diğerine kalıcı yönlendirin.
.htaccess içinde Apache’nin mod_rewrite modülünü kullanabilirsiniz. Temel yaklaşım, ziyaretçinin gördüğü kısa ve açıklayıcı URL’yi uygulamanın çalıştırdığı PHP dosyasına dahili olarak yönlendirmek; eski URL’leri ise kalıcı 301 yönlendirmesiyle yeni adrese taşımaktır. Aşağıdaki örnek, /urun/kahve-makinesi adresini urun.php?slug=kahve-makinesi isteğine çevirir.Ön koşullar ve çalışma mantığı
.htaccess dosyası, sitenin web kök dizininde bulunmalıdır. Apache yapılandırmasında mod_rewrite etkin olmalı ve ilgili dizin için en az AllowOverride FileInfo izni verilmelidir. AllowOverride None kullanılıyorsa .htaccess dosyası okunmaz..htaccess bağlamında RewriteRule deseni başında / olmadan yazılır. Örneğin kök dizindeki dosya için ^urun/... doğrudur; ^/urun/... kullanmak eşleşmenin başarısız olmasına neden olabilir.Çalıştırılabilir en küçük örnek
Web kök dizinine aşağıdaki
.htaccess içeriğini yerleştirin:
Kod:
RewriteEngine On
# Eski biçimleri tek kanonik adrese yönlendir
RewriteRule ^urun/([a-z0-9-]+)\.html$ /urun/$1 [R=301,END]
RewriteRule ^urun/([a-z0-9-]+)/$ /urun/$1 [R=301,END]
# Gerçek dosya ve klasörleri dahili eşlemeden hariç tut
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [END]
# Yolun slug değerini uygulamaya gönder
RewriteRule ^urun/([a-z0-9-]+)$ urun.php?slug=$1 [END]
Aynı dizinde, kuralın hedefini gerçekten karşılayan en küçük
urun.php dosyası şöyle olabilir:
PHP:
<?php
$slug = $_GET['slug'] ?? '';
if (!is_string($slug) || !preg_match('/^[a-z0-9-]+$/', $slug)) {
http_response_code(404);
exit('Ürün bulunamadı');
}
echo 'Ürün slug: ' . htmlspecialchars($slug, ENT_QUOTES, 'UTF-8');
- Önce CMS’nin bu yolu yönetmediğini ve
/urun/yolunda çakışan gerçek bir klasör olmadığını kontrol edin. Dosyaları kaydedip Apache’nin değişikliği kabul ettiğini doğrulayın. /urun/kahve-makinesiadresini açın. Beklenen sonuç, sayfanın çalışması veÜrün slug: kahve-makinesiçıktısının görünmesidir./urun/kahve-makinesi.htmladresini açın. Beklenen sonuç, tarayıcının/urun/kahve-makinesiadresine kalıcı olarak yönlenmesidir.- Sonuç
404ise dosyanın kök dizindeki.htaccessile aynı dizinde olup olmadığını ve PHP dosyasının mevcut olduğunu kontrol edin.500 Internal Server Errorgörülürse Apache hata günlüğünde sözdizimi veya izin hatasını inceleyin.
slug değerinin istemci sorgusuyla değiştirilmesine izin vermeyin.Bu örnekte tarayıcı SEO URL’sini görür.
urun.php adresine yapılan dahili eşleme tarayıcı adres çubuğunu değiştirmez.Yönlendirme ile dahili rewrite farkı
Kural yazarken işlemin tarayıcıya mı bildirileceğini, yoksa yalnızca sunucu içinde mi yapılacağını ayırmak önemlidir.
| İşlem | Örnek | Tarayıcı adresi | Kullanım amacı |
|---|---|---|---|
| 301 yönlendirme | [R=301] | Değişir | Eski URL’yi kalıcı yeni URL’ye taşımak |
| Dahili rewrite | urun.php?slug=$1 | Değişmez | Kısa URL’yi uygulama dosyasına bağlamak |
301 yönlendirme uygulayın. Kullanıcıya görünen URL’yi değiştirmeden PHP, CMS veya ön yüz yönlendiricisine istek aktarmak istiyorsanız dahili rewrite kullanın. Eski ve yeni URL’yi aynı anda içerik döndürecek şekilde açık bırakmak kopya URL sorunlarına yol açabilir.Sık yapılan hatalar
- Kök
.htaccessiçindeRewriteRule ^/urun/...yazmak:.htaccessbağlamında baştaki eğik çizgi genellikle eşleşmez. - Gerçek dosya ve klasörleri hariç tutmamak: CSS, JavaScript veya görseller uygulama dosyasına gönderilebilir. Bu nedenle
-fve-dkoşulları önemlidir. - Eski URL’yi sadece içeride rewrite etmek: Adres çubuğu değişmediği için eski ve yeni adresler birlikte erişilebilir kalır. Kanonik geçişte
301kullanın. - Her kuralda yalnızca
[L]kullanmak:.htaccessiçinde yeni işlem turları oluşabileceğinden bazı yapılarda döngü görülebilir. Apache 2.4 ortamında uygun durumlarda[END]kullanın. - Kullanıcı girdisini sınırsız yakalamak: Slug deseni yalnızca izin verilen karakterleri kabul etmeli; uygulama tarafında da doğrulama yapılmalıdır.
Sık sorulan sorular
RewriteBase yazmak zorunlu mudur?
Kök dizindeki basit kurallarda çoğu zaman zorunlu değildir. Alt dizinde göreli hedefler kullanıyorsanız ve URL öneki doğru oluşmuyorsa
RewriteBase ihtiyacını değerlendirin; önce kuralın bulunduğu dizini ve hedef yolunu kontrol edin.URL sonunda eğik çizgi olmalı mı?
Dosya veya kaynak türüne göre tek bir biçim seçin. Hem eğik çizgili hem eğik çizgisiz biçimi içerik döndürecek şekilde açık bırakmak yerine bir biçimi diğerine kalıcı yönlendirin.