Apache'de RewriteRule ile URL Yönlendirme
Apache HTTP Server, dünyanın en yaygın kullanılan web sunucularından biridir ve modüler yapısı sayesinde çeşitli işlevler eklenebilir. mod_rewrite modülü, bu işlevselliğin temelini oluşturur ve RewriteRule direktifi ile bu modülün gücü serbest bırakılır. Bu direktif, belirli bir desene uyan URL'leri, belirtilen başka bir URL'ye veya kaynağa dönüştürmek için kullanılır. Bu, web sitelerinin sürdürülebilirliği, erişilebilirliği ve arama motoru performansı açısından vazgeçilmezdir. Özellikle büyük web sitelerinde veya CMS sistemlerinde, URL yapısındaki değişiklikler veya mobil uyumluluk için URL'leri düzenleme ihtiyacı doğduğunda RewriteRule hayati bir rol oynar.
Apache'de RewriteRule Nasıl Çalışır?
Apache'deki RewriteRule direktifinin çalışma mekanizması, belirli kurallar dizisi üzerinden işler. Bu kurallar, sunucu yapılandırma dosyalarında (genellikle .htaccess veya ana Apache yapılandırma dosyası olan httpd.conf içinde) tanımlanır. Bir isteğin işlenmesi sırasında, mod_rewrite modülü aktif hale gelir ve tanımlanan kuralları sırayla kontrol eder.
- İstek Alınması: Bir kullanıcı tarayıcı aracılığıyla bir URL'ye istek gönderdiğinde, Apache bu isteği alır.
mod_rewriteAktivasyonu: Eğermod_rewritemodülü etkinleştirilmişse ve ilgili yapılandırma mevcutsa, modül bu isteği işlemeye başlar.- Kural Kontrolü:
RewriteRuledirektifleri, yapılandırma dosyasında belirtilen sıraya göre işlenir. Her kural, bir deseni (regex ile tanımlanır) ve bu desenle eşleşen bir hedefi içerir. - Desen Eşleştirme: Gelen URL, kuralın ilk parametresi olan desene karşı kontrol edilir. Desen, URL'nin hangi bölümünün eşleştirileceğini tanımlar ve genellikle Perl ile uyumlu düzenli ifadeler (regex) kullanır.
- Yeniden Yazma veya Yönlendirme: Eğer gelen URL, bir kuralın deseniyle eşleşirse, kuralın ikinci parametresi olan hedef URL'ye göre işlem yapılır. Bu işlem iki ana şekilde gerçekleşebilir:
- URL Yeniden Yazma (Rewrite): Bu durumda, URL istemciye gösterilmeden sunucu tarafından değiştirilir. İstemci, yeniden yazılmış URL'yi görmez. Örneğin,
/urun.php?id=123URL'si/urunler/123olarak yeniden yazılabilir. Bu, SEO açısından faydalıdır çünkü daha temiz ve okunabilir URL'ler sunar. - URL Yönlendirme (Redirect): Bu durumda, Apache istemciye bir HTTP durum kodu (örneğin 301 Kalıcı Taşıma veya 302 Geçici Taşıma) göndererek yeni URL'ye gitmesini söyler. İstemci tarayıcısı, belirtilen yeni URL'ye giderek isteği tekrar gönderir. Örneğin, eski bir sayfanın URL'si değiştiğinde, kullanıcıları otomatik olarak yeni adrese yönlendirmek için kullanılır.
- URL Yeniden Yazma (Rewrite): Bu durumda, URL istemciye gösterilmeden sunucu tarafından değiştirilir. İstemci, yeniden yazılmış URL'yi görmez. Örneğin,
- Bayrakların (Flags) Uygulanması:
RewriteRuledirektifinin sonunda çeşitli bayraklar kullanılabilir. Bu bayraklar, yeniden yazma veya yönlendirme işleminin nasıl gerçekleştirileceğini belirler. Örneğin,[R=301]kalıcı yönlendirme yapar,[L]ise bu kuraldan sonra başka kural kontrol edilmeyeceğini belirtir. - Sonuç: Eşleşen bir kural bulunduğunda ve işlem uygulandığında, işlem tamamlanır veya bir sonraki kurala geçilir (
[L]bayrağı kullanılmadıysa). Eğer hiçbir kural eşleşmezse, URL olduğu gibi işlenir.
Bu süreç, karmaşık URL manipülasyonlarına olanak tanır. Örneğin, belirli bir dizindeki tüm statik dosya isteklerini başka bir sunucuya veya farklı bir konuma yönlendirmek, belirli sorgu parametrelerine sahip URL'leri standartlaştırmak veya belirli kullanıcı ajanlarına farklı içerikler sunmak gibi işlemler bu mekanizma ile gerçekleştirilebilir. Apache'nin esnekliği, RewriteCond direktifi ile ek koşullar belirlemeye de imkan tanır, bu da kuralların daha spesifik durumlarda tetiklenmesini sağlar.
Apache'de RewriteRule Kullanımı ve Örnekleri
RewriteRule kullanımı, doğru desen tanımı ve bayrakların seçimi ile doğrudan ilişkilidir. Genellikle .htaccess dosyaları, her dizin için ayrı yapılandırma imkanı sunduğundan ve sunucu yapılandırmasına doğrudan erişim gerektirmediğinden tercih edilir. Ancak, performans açısından ana yapılandırma dosyası daha iyi olabilir. mod_rewrite modülünün etkinleştirilmesi ilk adımdır; bu genellikle sunucu yöneticisi tarafından yapılır.
Temel RewriteRule Yapısı
Bir RewriteRule direktifi şu genel yapıya sahiptir:
RewriteRule Desen Hedef [Bayraklar]
- Desen (Pattern): Gelen URL'nin yeniden yazılıp yazılmayacağını belirlemek için kullanılan düzenli ifadedir. Bu ifade, URL'nin sorgu dizisi hariç kısmına uygulanır.
- Hedef (Substitution): Desenle eşleşen URL'nin hangi yeni URL'ye veya kaynağa dönüştürüleceğini belirten ifadedir. Bu, mutlak bir yol, göreceli bir yol veya tam bir URL olabilir. Desen içindeki yakalama grupları (parantezler ile belirtilir) hedefte kullanılabilir.
- Bayraklar (Flags): Yeniden yazma işleminin davranışını değiştiren isteğe bağlı parametrelerdir. Bazı yaygın bayraklar şunlardır:
L(Last): Bu kuraldan sonra başka kural kontrol edilmez.R(Redirect): İstemciye bir HTTP yönlendirmesi gönderilir.R=301kalıcı,R=302geçici yönlendirme yapar.NC(NoCase): Desen eşleştirmesinde büyük/küçük harf duyarsızlığı sağlar.OR(Or): Birden fazlaRewriteRule'u birleştirmek için kullanılır. (Daha çokRewriteCondile kullanılır.)PT(PassThrough): Sunucu tarafından işlenmek üzere isteği yeniden yazar.QSA(Query String Append): Gelen sorgu dizisini (query string) hedef URL'ye ekler.
Yaygın Kullanım Senaryoları ve Örnekler
1. Eski URL'leri Yeni URL'lere Yönlendirme (301 Kalıcı Yönlendirme)
Web sitenizin yapısını değiştirdiniz ve eski URL'leri yeni URL'lere yönlendirmek istiyorsunuz. Örneğin, /eski-sayfa.html'yi /yeni-sayfa'ya yönlendirmek:
RewriteEngine On RewriteRule ^eski-sayfa\.html$ /yeni-sayfa [R=301,L]
Bu kural, tam olarak eski-sayfa.html ile eşleşen bir isteği alır ve bunu /yeni-sayfa'ya kalıcı olarak yönlendirir. ^ ve $ karakterleri, desenin tam eşleşmesini sağlar. \., nokta karakterini literal olarak eşleştirmek içindir.
2. Sorgu Parametrelerini Temizleme (SEO Dostu URL'ler)
Dinamik olarak oluşturulan URL'leri daha okunabilir hale getirmek için kullanılır. Örneğin, /urun.php?id=123&kategori=elektronik URL'sini /urunler/123/elektronik'e dönüştürmek:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^urunler/([0-9]+)/([a-zA-Z-]+)$ /urun.php?id=$1&kategori=$2 [QSA,L]
Burada RewriteCond kullanılmıştır. İlk iki RewriteCond, isteğin mevcut bir dosya veya dizine yönelik olmadığını kontrol eder. Bu, sunucunun fiziksel dosya isteklerini yanlışlıkla yeniden yazmasını önler. Desen ^urunler/([0-9]+)/([a-zA-Z-]+)$, "urunler/" ile başlayan, ardından bir veya daha fazla rakam (ilk yakalama grubu: $1) ve ardından bir veya daha fazla harf içeren bir yapıyı yakalar. Bu yakalanan değerler, /urun.php?id=$1&kategori=$2 hedefinde kullanılır. QSA bayrağı, orijinal sorgu dizisini de ekler.
3. www Prefiksini Kaldırma veya Ekleme
Sitenizin hem www.example.com hem de example.com üzerinden erişilebilir olmasını sağlamak ve tek bir canonical URL kullanmak için kullanılır. Genellikle www'yi kaldırmak tercih edilir:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Bu kural, host adı www. ile başlıyorsa ([NC] ile büyük/küçük harf duyarsız), tüm URL'yi (^(.*)$, tümünü yakalar: $1) www olmadan (%1, yakalanan alan adı) aynı yola yönlendirir.
4. Klasörleri Gizleme
/dizin/index.php gibi URL'leri sadece /dizin/ gibi göstermek için:
RewriteEngine On RewriteRule ^dizin/$ /dizin/index.php [L]
Bu, kullanıcıya daha temiz bir URL sunar.
5. Dosya Uzantılarını Gizleme
.php, .html gibi uzantıları URL'lerden kaldırmak için:
RewriteEngine On RewriteRule ^sayfa$ /sayfa.php [L] RewriteRule ^urunler/([0-9]+)$ /urunler.php?id=$1 [QSA,L]
Bu, /sayfa isteğini /sayfa.php'ye, /urunler/123 isteğini ise /urunler.php?id=123'e dönüştürür.
RewriteRule Yapılandırması İçin En İyi Pratikler
RewriteRule direktiflerini doğru ve verimli kullanmak için bazı en iyi pratiklere uyulması önemlidir. Yanlış yapılandırılmış kurallar, site performansını olumsuz etkileyebilir, sonsuz döngülere neden olabilir veya beklenmedik davranışlara yol açabilir.
- Test Edin: Herhangi bir kuralı canlı ortama uygulamadan önce mutlaka test edin. Bu, yerel bir geliştirme ortamında veya bir staging sunucusunda yapılabilir.
- Kural Sırasına Dikkat Edin: Kurallar, yapılandırma dosyasında listelendiği sırayla işlenir. En spesifik kuralları önce, daha genel kuralları sonra yerleştirmek genellikle daha iyi sonuç verir.
[L]bayrağı, kural işlendikten sonra işlemin durdurulmasını sağlar ve bu da performansı artırır. RewriteCondKullanımı: Yönlendirme veya yeniden yazma işlemlerini belirli koşullara bağlamak içinRewriteConddirektifini kullanın. Bu, kuralların yalnızca gerektiğinde çalışmasını sağlar. Örneğin, yalnızca belirli bir IP adresinden gelen isteklere izin vermek veya belirli bir tarayıcıyı farklı yönlendirmek için kullanılabilir.- Performans Odaklılık: Özellikle yüksek trafikli sitelerde, karmaşık düzenli ifadeler veya çok sayıda kural performansı etkileyebilir. Mümkün olduğunca basit ve verimli desenler kullanmaya çalışın.
.htaccessdosyaları her istekte okunup işlendiği için, ana Apache yapılandırma dosyasına göre bir miktar performans kaybına neden olabilir. - Düzenli İfadeleri (Regex) Anlayın:
RewriteRuledesenleri düzenli ifadelerle yazılır. Bu ifadelerin doğru anlaşılması, hatalı eşleşmeleri veya eşleşmeme durumlarını önlemek için kritiktir. RewriteEngine On:mod_rewritemodülünü kullanabilmek için yapılandırma dosyasının başındaRewriteEngine Ondirektifinin bulunması gerekir.- Sonsuz Döngülerden Kaçının: Bir kuralın kendisini veya başka bir kuralı tetikleyerek sonsuz bir döngüye girmemesine dikkat edin. Özellikle
[L]bayrağını doğru kullanmak bu döngüleri engeller. - Kavramsal Netlik: Yapılandırma dosyanızdaki kuralları yorum satırlarıyla (
#ile başlar) açıklayın. Bu, gelecekte kuralları anlamayı ve değiştirmeyi kolaylaştırır.
Sık Yapılan Hatalar ve Çözümleri
RewriteRule kullanırken karşılaşılabilecek bazı yaygın hatalar ve bunların çözümleri şunlardır:
- Hata: URL'ler yeniden yazılmıyor veya yönlendirilmiyor.
- Çözüm:
RewriteEngine Ondirektifinin etkin olduğundan emin olun. Kuralın doğru sıraya sahip olup olmadığını kontrol edin.[L]bayrağının olmaması, sonraki kuralların işlemi bozmasına neden olabilir. Desen eşleşmesinin doğru yapıldığını regex test araçlarıyla doğrulayın.
- Çözüm:
- Hata: Sonsuz yönlendirme döngüsü (örneğin, tarayıcıda "Bu web sitesi bir döngüye neden oluyor" hatası).
- Çözüm: Kuralların birbirini tetikleyip kırmadığını kontrol edin. Özellikle
[L]bayrağını agresif kullanmak veyaRewriteCondile doğru koşulları sağlamamak bu duruma yol açabilir. URL'yi normalize eden kuralları (örneğin www ekleme/kaldırma) genellikle en başa koymak ve[L]ile sonlandırmak iyi bir pratiktir.
- Çözüm: Kuralların birbirini tetikleyip kırmadığını kontrol edin. Özellikle
- Hata: Site performansı düştü.
- Çözüm: Kullanılan düzenli ifadelerin karmaşıklığını gözden geçirin. Çok sayıda veya gereksiz karmaşık kural performansı düşürebilir.
.htaccessyerine ana yapılandırma dosyasını kullanmayı düşünün.
- Çözüm: Kullanılan düzenli ifadelerin karmaşıklığını gözden geçirin. Çok sayıda veya gereksiz karmaşık kural performansı düşürebilir.
- Hata: Statik dosyalar (CSS, JS, resimler) yüklenmiyor.
- Çözüm:
RewriteCond %{REQUEST_FILENAME} !-fveRewriteCond %{REQUEST_FILENAME} !-dgibi koşulların, bu tür dosyaların yeniden yazma işlemine tabi tutulmasını engellediğinden emin olun. Bu koşullar, statik dosya isteklerinin fiziksel dosya olarak işlenmesini sağlar.
- Çözüm:
- Hata: Sorgu dizisi (query string) kayboluyor.
- Çözüm: Hedef URL'ye
[QSA]bayrağını eklediğinizden emin olun. Bu bayrak, orijinal isteğin sorgu dizisini hedef URL'ye ekler.
- Çözüm: Hedef URL'ye
Teknik Özellikler ve Standartlar
RewriteRule direktifi, Apache'nin mod_rewrite modülünün bir parçasıdır. Bu modül, RFC 3986 (URI Belirleyicileri: Genel Sözdizimi) standardına uygun URL işleme yetenekleri sunar. Düzenli ifadeler için kullanılan dil, Perl Compatible Regular Expressions (PCRE) ile uyumludur. Bu, desen eşleştirme için geniş bir esneklik sağlar.
RewriteRule'nun hedefi, mutlak veya göreceli yollar olabileceği gibi, bir protokol (http, https) ve alan adı da içerebilir. Yönlendirmeler için kullanılan HTTP durum kodları (örneğin, 301, 302, 307, 308), web standartlarına uygun olarak kullanılır ve arama motorları ile tarayıcılar tarafından doğru şekilde yorumlanır. Modülün kendisi, Apache'nin HTTP sunucusu mimarisi içinde bir filtre olarak çalışır, bu da gelen isteklerin işlenmesi sırasında URL'leri manipüle etmesine olanak tanır.
2026 Sektör Verileri ve İstatistikler
Web sunucusu teknolojileri ve URL yönetimi, web'in temel taşlarından biridir. W3Techs 2026 verilerine göre, Apache hala web sitelerinin önemli bir yüzdesine güç vermeye devam etmektedir, ancak Nginx gibi alternatifler de pazar payını artırmaktadır. Bu durum, Apache'nin uzun ömürlülüğünü ve mod_rewrite gibi güçlü özelliklerinin geçerliliğini koruduğunu göstermektedir. Statista 2026 raporlarına göre, kullanıcıların daha temiz ve mobil uyumlu URL'lere olan ilgisi artmakta, bu da RewriteRule gibi araçların SEO ve kullanıcı deneyimi optimizasyonundaki önemini vurgulamaktadır. Cloudflare Radar 2026 verileri, web trafiğinin artan hız ve güvenlik beklentilerini ortaya koymaktadır; bu bağlamda, doğru URL yönlendirmeleri ve yeniden yazmaları, site hızını ve arama motoru sıralamalarını doğrudan etkileyebilir. Netcraft 2026 araştırmaları, milyarlarca aktif web sitesi olduğunu göstermektedir; bu ölçekteki internet varlığında, tutarlı ve optimize edilmiş URL yapıları yönetilebilirliği ve erişilebilirliği sağlamak için kritik öneme sahiptir.
İlgili Konular
Apache'nin sunduğu güçlü yönlendirme yeteneklerini daha iyi anlamak için, temel Web Sunucusu Kurulumu makalesine göz atabilirsiniz. Ayrıca, Apache ve Nginx gibi popüler web sunucularının karşılaştırmalı analizini içeren Apache vs Nginx Hangisi Daha İyi? başlıklı makalemiz, farklı sunucu yapılandırmaları hakkında ek bilgiler sunmaktadır.

