Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
SEO uyumlu URL oluşturmak için .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');
  1. Ö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.
  2. /urun/kahve-makinesi adresini açın. Beklenen sonuç, sayfanın çalışması ve Ürün slug: kahve-makinesi çıktısının görünmesidir.
  3. /urun/kahve-makinesi.html adresini açın. Beklenen sonuç, tarayıcının /urun/kahve-makinesi adresine kalıcı olarak yönlenmesidir.
  4. Sonuç 404 ise dosyanın kök dizindeki .htaccess ile aynı dizinde olup olmadığını ve PHP dosyasının mevcut olduğunu kontrol edin. 500 Internal Server Error görülürse Apache hata günlüğünde sözdizimi veya izin hatasını inceleyin.
Bu örnek site kökünde çalışan Apache 2.4 içindir; CMS’nin var olan kurallarına körlemesine eklemeyin. Önce yedeğinizi alın ve yönlendirmeleri test ortamında 302 ile doğrulayıp kalıcı olduklarında 301 yapın. Yeni sorgu metni üretildiği için bu basit eşleme, gelen diğer sorgu parametrelerini korumaz. Takip/filtre parametreleri gerekiyorsa onları ayrı tasarlayın; 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ÖrnekTarayıcı adresiKullanım amacı
301 yönlendirme[R=301]DeğişirEski URL’yi kalıcı yeni URL’ye taşımak
Dahili rewriteurun.php?slug=$1DeğişmezKısa URL’yi uygulama dosyasına bağlamak
Eski adresler arama motorlarında veya dış bağlantılarda kullanılıyorsa 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​

  1. Kök .htaccess içinde RewriteRule ^/urun/... yazmak: .htaccess bağlamında baştaki eğik çizgi genellikle eşleşmez.
  2. Gerçek dosya ve klasörleri hariç tutmamak: CSS, JavaScript veya görseller uygulama dosyasına gönderilebilir. Bu nedenle -f ve -d koşulları önemlidir.
  3. 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 301 kullanın.
  4. Her kuralda yalnızca [L] kullanmak: .htaccess iç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.
  5. 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.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic