Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Apache'de Mod_Rewrite ile URL Yönetimi: Temiz URL'ler ve Yönlendirmeler 🛠️

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
12
Apache'de Mod_Rewrite ile URL Yönetimi: Temiz URL'ler ve Yönlendirmeler 🛠️

Selam sistemciler! 🖥️ Bugün, web sunucunuzun gizli kahramanlarından biri olan mod_rewrite modülünü terminalin derinliklerinden çıkarıp, onunla neler yapabileceğimize bakacağız. Eğer "index.php?page=about&id=5" gibi karmaşık URL'lerden, "/hakkimizda" gibi temiz ve SEO dostu yapılara geçmek, eski linkleri yeni adreslere yönlendirmek ya da belirli erişim kuralları koymak istiyorsanız, doğru yerdesiniz.

Mod_Rewrite Nedir ve Neden Önemlidir?

Apache'nin bu güçlü modülü, gelen HTTP isteklerini gerçek zamanlı olarak yeniden yazmanıza (rewrite) ve yönlendirmenize (redirect) olanak tanır. Kullanıcıların tarayıcıda gördüğü URL ile sunucuda aslında çalıştırılan dosya farklı olabilir. Peki bu ne işe yarar?
  • SEO (Arama Motoru Optimizasyonu): Temiz, anlaşılır ve anahtar kelime içeren URL'ler arama motorlarında daha iyi sıralanır.
  • Kullanıcı Deneyimi: "site.com/urun/kirmizi-ayakkabi" adresi, "site.com/product.php?id=42" den çok daha akılda kalıcı ve güvenilirdir.
  • Güvenlik ve Yapılandırma: Hassas dosya yollarını gizleyebilir, belirli IP veya referer'lara göre erişimi engelleyebilirsiniz.
  • Taşınabilirlik: Uygulamanızın arka uç yapısı değişse bile, dış dünyaya sunduğunuz URL'ler sabit kalabilir.

Mod_Rewrite'ı Etkinleştirme

Öncelikle modülün yüklü ve aktif olduğundan emin olalım. Ubuntu/Debian tabanlı sistemlerde:

Bash:
sudo a2enmod rewrite
sudo systemctl restart apache2

CentOS/RHEL tabanlı sistemlerde ise `httpd.conf` veya `/etc/httpd/conf.modules.d/00-base.conf` dosyasında aşağıdaki satırın başındaki `#` işaretini kaldırmanız yeterli:
Kod:
LoadModule rewrite_module modules/mod_rewrite.so
Ardından Apache'yi yeniden başlatın: `sudo systemctl restart httpd`

.htaccess ile Çalışmak

Kurallarımızı genellikle web sitenizin kök dizinindeki .htaccess dosyasına yazarız. Bu dosya gizlidir. Oluşturmak için:
Bash:
nano /var/www/html/siteniz/.htaccess
Önemli Not: Apache'nin .htaccess dosyalarını okuyabilmesi için, ilgili `<Directory>` bloğunda `AllowOverride All` izninin verilmiş olması gerekir. Bu ayar genellikle `/etc/apache2/sites-available/000-default.conf` veya sanal host dosyanızdadır.

Temel Mod_Rewrite Kuralları ve Örnekler

Şimdi biraz pratik yapalım! İşte en sık kullanılan örnekler:

1. www'suzdan www'luya Yönlendirme (veya Tersi):
SEO için tutarlı bir alan adı kullanmak önemlidir.
Kod:
# www'suz adresten www'lu adrese yönlendir
RewriteEngine On
RewriteCond %{HTTP_HOST} ^orneksite\.com [NC]
RewriteRule ^(.*)$ http://www.orneksite.com/$1 [L,R=301]

# www'lu adresten www'suz adrese yönlendir (tersi)
RewriteCond %{HTTP_HOST} ^www\.orneksite\.com [NC]
RewriteRule ^(.*)$ http://orneksite.com/$1 [L,R=301]

2. HTTP'den HTTPS'ye Yönlendirme: 🛡️ Güvenlik için olmazsa olmaz!
Kod:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

3. Temiz URL (SEO Friendly URL) Oluşturma:
`index.php?sayfa=haber&id=123` adresini `/haber/123` yapalım.
Kod:
RewriteEngine On
# Eğer istek bir dosya veya klasör değilse...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# O zaman tüm istekleri index.php'ye yönlendir.
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Bu kuralda, `/haber/123` adresi arka planda `index.php?url=haber/123` olarak işlenir. PHP kodunuz `$_GET['url']` değişkenini parçalayarak gerekli içeriği gösterebilir.

4. Eski URL'leri Yeni Yapıya Yönlendirme (301 Redirect):
Bir sayfanızın URL'si değiştiyse, arama motoru sıralamasını ve backlink gücünü kaybetmemek için 301 kalıcı yönlendirme kullanın.
Kod:
Redirect 301 /eski-dizin/eskisayfa.html http://www.orneksite.com/yeni-sayfa
# Veya mod_rewrite ile:
RewriteRule ^urun/([0-9]+)$ /yeni-urun/$1 [R=301,L]

5. Belirli Bir IP Adresini Engelleme:
Kod:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^123\.123\.123\.123$
RewriteRule .* - [F]
Bu kural, `123.123.123.123` IP adresinden gelen tüm isteklere 403 Yasaklı (Forbidden) hatası döndürür.

Hata Ayıklama ve Test Etme

Kurallarınız çalışmıyorsa, önce Apache'nin hata loglarını kontrol edin:
Bash:
sudo tail -f /var/log/apache2/error.log
# veya CentOS'ta
sudo tail -f /var/log/httpd/error_log
Ayrıca, `.htaccess` dosyanıza aşağıdaki satırı ekleyerek mod_rewrite loglamasını açabilirsiniz (canlı sunucuda uzun süre açık bırakmayın!):
Kod:
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Önemli Uyarılar ve En İyi Uygulamalar
  • Kuralların Sırası Önemlidir: Apache kuralları yukarıdan aşağı okur ve eşleşen ilk kuralı uygular. Genel kuralları en alta, özel kuralları en üste yazın.
  • Gereksiz Kurallardan Kaçının: Her kural sunucuya ekstra yük bindirir. Mümkünse, performans için kuralları doğrudan sanal host konfigürasyonuna (`<Directory>` içine) yazmayı düşünün.
  • 301 vs 302 Yönlendirme: Kalıcı bir adres değişikliği ise R=301 kullanın. Geçici bir yönlendirme için R=302 kullanın.
  • Test, Test, Test! Bir kuralı canlı sunucuya eklemeden önce mutlaka bir test ortamında deneyin. Yanlış bir kural sitenizin erişilemez olmasına neden olabilir.

Umarım bu rehber, Apache'nin bu güçlü modülünü anlamanıza ve kendi projelerinizde güvenle kullanmanıza yardımcı olur. 🚀 Mod_Rewrite ile yaptığınız en yaratıcı veya en karmaşık kural neydi? Paylaşmak ister misiniz? Aşağıdaki yorumlarda buluşalım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri