MySQL veritabanından çekilen dinamik sayfa linklerini, SEO uyumlu (SEF URL) yapıya (.htaccess ile) çevirmenin en güvenli yolu nedir?

0

Arkadaşlar, bir web sitesi projesinde MySQL veritabanından çektiğim dinamik linkleri seo dostu SEF URL'lere dönüştürmek istiyorum. Özellikle .htaccess kullanarak bunu yaparken güvenlik açıklarından kaçınmak ve en sağlam yöntemi uygulamak istiyorum. Bu konuda tecrübeli arkadaşların önerilerini ve güvenli kod örneklerini bekliyorum. Site hızını ve SEO'sunu olumlu etkileyecek bir çözüm arıyorum.

Cevaplar (1)

1

MySQL veritabanından alınan dinamik URL'leri SEO dostu (SEF - Search Engine Friendly) yapılara dönüştürmek, hem kullanıcı deneyimini iyileştirir hem de arama motoru sıralamalarını olumlu etkiler. Bu dönüşümü en güvenli ve profesyonel şekilde gerçekleştirmek için Apache sunucunuzda bulunan Mod_rewrite modülünü ve .htaccess dosyasını kullanmanız en etkili yöntemdir.

Temel Yaklaşım ve güvenlik önlemleri

Bu sürecin temelinde, sunucu tarafında URL'leri yeniden yazma (URL rewriting) yeteneği yatar. Mod_rewrite modülü, gelen istekleri belirli kurallara göre işleyerek farklı bir URL'ye yönlendirir veya aynı içeriği farklı bir URL yapısıyla sunar. Güvenlik açısından en kritik nokta, gelen parametreleri veritabanı sorgularında kullanmadan önce mutlaka Doğru şekilde temizlemek ve doğrulamaktır. Bu, SQL enjeksiyonu gibi saldırıların önüne geçmek için hayati önem taşır.

Adım Adım uygulama ve Güvenli Kod Yapısı

İşte bu dönüşümü sağlamak için izlenmesi gereken adımlar ve dikkat edilmesi gerekenler:

  1. Mod_rewrite Modülünü Etkinleştirme: Sunucunuzda Mod_rewrite modülünün aktif olduğundan emin olun. Genellikle hosting panellerinde bu ayar mevcuttur veya sunucu yöneticisi ile iletişime geçilerek etkinleştirilebilir.
  2. .htaccess Dosyasını Yapılandırma: Sitenizin kök dizinine (veya ilgili alt dizine) bir .htaccess dosyası oluşturun. Bu dosya, Apache sunucusuna özel yönlendirme ve yapılandırma kurallarını içerir.
  3. Temel Rewrite Kuralları: Dinamik URL'leri statik görünümlü SEF URL'lere dönüştürmek için aşağıdaki gibi kurallar kullanabilirsiniz. Burada amaç, örneğin Site.com/urun.php?id=123&kategori=telefon gibi bir URL'yi Site.com/telefon/urun-adi-123 formatına getirmektir.
RewriteEngine On
RewriteBase /

# Dinamik URL'leri SEF URL'lere dönüştürme kuralı
# Örnek: /urun.php?id=123&kategori=telefon -> /telefon/urun-adi-123
RewriteRule ^([^/]+)/([^/]+)/?$ urun.php?kategori=$1&urunadi=$2 [L,QSA]

# Tersine işlem: SEF URL'leri dinamik URL'lere çevirme (opsiyonel ama önerilir)
# Bu kural, sunucunun SEF URL'leri doğru şekilde işlemesini sağlar.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ urun.php?kategori=$1&urunadi=$2 [L]

# Diğer kurallarınız buraya eklenebilir
Copy

Yukarıdaki örnekte:

  • RewriteEngine On: URL yeniden yazma motorunu etkinleştirir.
  • RewriteBase /: Yönlendirmelerin temel yolunu belirtir.
  • RewriteRule ^([^/]+)/([^/]+)/?$ urun.php?kategori=$1&urunadi=$2 [L,QSA]: Bu kural, /kategori/urun-adi formatındaki URL'leri Urun.php?kategori=kategori&urunadi=urun-adi şeklinde işler.
  • [L] (Last): Bu kural uygulandıktan sonra başka kural aranmaz.
  • [QSA] (Query String Append): Orijinal URL'deki sorgu parametrelerini yeni URL'ye ekler.

Güvenlik Odaklı uygulama (php Tarafı)

.htaccess ile URL'leri dönüştürürken, PHP tarafında veritabanı sorgularını güvenli hale getirmek esastır. Dinamik URL'den alınan parametreleri (örneğin, $_GET['kategori'] veya $_GET['urunadi']) doğrudan veritabanı sorgularında kullanmak yerine, mutlaka Hazırlanmış ifadeler (prepared statements) veya güvenli fonksiyonlarla temizlemelisiniz.

// Örnek: Güvenli veritabanı sorgusu (PDO ile)
$kategori = $_GET['kategori'];
$urunadi = $_GET['urunadi'];

// Güvenlik: Parametreleri temizleme ve hazırlama
$stmt = $pdo->Prepare('SELECT * FROM urunler WHERE kategori_seo = :kategori AND urun_seo = :urunadi');
$stmt->BindParam(':kategori', $kategori);
$stmt->BindParam(':urunadi', $urunadi);
$stmt->Execute();
$urun = $stmt->Fetch();

if (!$urun) {
    // Ürün bulunamazsa 404 hatası verilebilir
    header('HTTP/1.0 404 Not Found');
    exit;
}

// Ürün bilgilerini göster...
Copy

Bu yaklaşım, hem URL'lerinizi SEO dostu hale getirir hem de veritabanı güvenliğini en üst düzeyde tutar. Dinamik verileri URL'ye yansıtırken, veritabanınızdaki ID'ler yerine SEO'ya uygun, okunabilir metinler (örneğin, ürün adları veya kategori adları) kullanmak, arama motorları için daha anlamlı olacaktır. Bu yapının doğru kurulması, sitenizin hem arama motorları nezdinde daha görünür olmasını sağlar hem de kullanıcıların sitenizle daha kolay etkileşim kurmasına olanak tanır.

Kullanıcılar