Apache mod_rewrite ile URL Yeniden Yazma: Ubuntu 18.04 Üzerinde Kapsamlı Bir Rehber
Giriş: mod_rewrite Nedir ve Neden Önemlidir?
Modern web uygulamalarında ve web sitelerinde URL yapısı, kullanıcı deneyimi, arama motoru optimizasyonu (SEO) ve güvenlik açısından kritik bir rol oynar. Karmaşık, parametrelerle dolu URL’ler hem kullanıcılar için anlaşılması zor olabilir hem de arama motorlarının sitenizi dizine eklemesini zorlaştırabilir. İşte tam bu noktada Apache web sunucusunun güçlü bir modülü olan mod_rewrite devreye girer. mod_rewrite, gelen URL isteklerini sunucuda farklı bir kaynağa yönlendirme veya yeniden yazma yeteneği sunar. Bu, dinamik web sitelerinin daha temiz, anlamlı ve kullanıcı dostu URL’lere sahip olmasını sağlar.
Ubuntu 18.04 gibi Linux tabanlı bir sunucu üzerinde Apache kullanırken mod_rewrite, web yöneticileri ve geliştiriciler için vazgeçilmez bir araçtır. Bu makalede, Ubuntu 18.04 üzerinde Apache ile mod_rewrite‘ı nasıl etkinleştireceğinizi, temel direktiflerini, yaygın kullanım senaryolarını ve hata ayıklama ipuçlarını ayrıntılı bir şekilde ele alacağız. Amacımız, mod_rewrite‘ın gücünü tam olarak anlamanızı ve projelerinizde etkili bir şekilde kullanabilmenizi sağlamaktır.
Ön Gereksinimler ve mod_rewrite’ı Etkinleştirme
mod_rewrite‘ı kullanmaya başlamadan önce, Ubuntu 18.04 sunucunuzda çalışan bir Apache web sunucusuna sahip olmanız gerekmektedir. Eğer henüz Apache kurulu değilse, aşağıdaki komutlarla kurulumu gerçekleştirebilirsiniz:
sudo apt update
sudo apt install apache2
Apache kurulu ve çalışır durumda olduğunda, mod_rewrite modülünün etkinleştirildiğinden emin olmamız gerekir. Çoğu Apache kurulumunda mod_rewrite varsayılan olarak yüklenir ancak etkinleştirilmesi gerekebilir.
mod_rewrite Durumunu Kontrol Etme
mod_rewrite‘ın etkin olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
apache2ctl -M | grep rewrite
Eğer çıktıda rewrite_module (shared) ifadesini görüyorsanız, mod_rewrite zaten etkin demektir ve bir sonraki adıma geçebilirsiniz. Aksi takdirde, modülü etkinleştirmeniz gerekecektir.
mod_rewrite’ı Etkinleştirme
mod_rewrite‘ı etkinleştirmek için Apache’nin a2enmod (Apache 2 Enable Module) aracını kullanırız:
sudo a2enmod rewrite
Bu komut, mod_rewrite modülünü etkinleştirir. Değişikliklerin etkili olması için Apache servisini yeniden başlatmanız gerekir:
sudo systemctl restart apache2
Artık mod_rewrite modülü sunucunuzda etkin ve kullanıma hazır durumda.
Konfigürasyon Bağlamı: Nerede ve Nasıl Kullanılır?
mod_rewrite kurallarını Apache’ye üç farklı bağlamda uygulayabiliriz:
1. Ana Sunucu Konfigürasyonu (apache2.conf veya httpd.conf): Bu dosya, Apache’nin genel konfigürasyonunu içerir. Burada tanımlanan kurallar tüm sanal ana bilgisayarları etkiler. Performans açısından en verimli yöntem olsa da, genellikle esneklik açısından sanal ana bilgisayar veya .htaccess dosyaları tercih edilir.
2. Sanal Ana Bilgisayar Konfigürasyonu (sites-available/*.conf): Ubuntu’da sanal ana bilgisayarlar genellikle /etc/apache2/sites-available/ dizinindeki .conf uzantılı dosyalarda tanımlanır. Bu dosyalar, belirli bir alan adı veya IP adresi için özel kurallar tanımlamanıza olanak tanır. Çoğu durumda, rewrite kurallarını buraya eklemek en dengeli yaklaşımdır.
3. Dizin Bazında Konfigürasyon (.htaccess Dosyaları): .htaccess dosyaları, web sitenizin kök dizininde veya alt dizinlerinde bulunabilen özel konfigürasyon dosyalarıdır. Bu dosyalar, bir dizin ve alt dizinleri için geçerli olacak rewrite kurallarını tanımlamanıza olanak tanır. Geliştiriciler için büyük esneklik sunar çünkü sunucuya erişim gerektirmeden kuralları değiştirebilirler. Ancak, her istekte Apache’nin bu dosyaları araması ve işlemesi gerektiğinden performans üzerinde bir miktar etkisi olabilir.
.htaccess Dosyaları İçin AllowOverride Ayarı
Eğer .htaccess dosyalarını kullanmayı planlıyorsanız, Apache’nin bu dosyaları okumasına ve içindeki direktifleri uygulamasına izin vermeniz gerekir. Bu, sanal ana bilgisayar konfigürasyonunuzdaki veya ana sunucu konfigürasyonunuzdaki bloğunda AllowOverride direktifi ile yapılır.
Örneğin, varsayılan web kök dizini /var/www/html için .htaccess kullanımını etkinleştirmek isterseniz, 000-default.conf dosyasını (veya kendi sanal ana bilgisayar dosyanızı) düzenlemeniz gerekebilir:
# ... diğer ayarlar ...
DocumentRoot /var/www/html
Options Indexes FollowSymLinks
AllowOverride All # Bu satır önemlidir!
Require all granted
# ...
AllowOverride All yerine AllowOverride FileInfo da kullanabilirsiniz, bu sadece mod_rewrite direktiflerine izin verir ve daha güvenlidir. Değişiklikleri kaydettikten sonra Apache’yi yeniden başlatmayı unutmayın:
sudo systemctl restart apache2
mod_rewrite Direktifleri: Temel Yapı Taşları
mod_rewrite‘ın gücü, üç ana direktif etrafında döner: RewriteEngine, RewriteCond ve RewriteRule.
RewriteEngine On/Off
Bu direktif, mod_rewrite motorunun belirli bir bağlamda (sanal ana bilgisayar veya dizin) açık mı yoksa kapalı mı olduğunu belirtir. Kuralları uygulamadan önce mutlaka On olarak ayarlanmalıdır.
RewriteEngine On
RewriteCond (Yeniden Yazma Koşulu)
RewriteCond, bir RewriteRule‘ın uygulanabilmesi için karşılanması gereken koşulları tanımlar. Bir RewriteRule‘dan önce birden fazla RewriteCond direktifi bulunabilir ve tüm koşulların (varsayılan olarak AND mantığıyla) karşılanması gerekir.
Sözdizimi:
RewriteCond TestString Koşul [Bayraklar]
* TestString: Karşılaştırmak istediğiniz dizedir. Bu genellikle sunucu değişkenleri, HTTP başlıkları veya diğer özel değerler olabilir. Örneğin:
* %{HTTP_HOST}: Gelen isteğin ana bilgisayar adı.
* %{REQUEST_URI}: İsteğin URI’si (protokol ve ana bilgisayar adı hariç).
* %{QUERY_STRING}: URL’deki sorgu dizesi.
* %{REQUEST_FILENAME}: İstenen dosyanın veya dizinin fiziksel yolu.
* %{HTTP_USER_AGENT}: Kullanıcının tarayıcı bilgisi.
* Koşul: TestString ile karşılaştırılacak düzenli ifade (regular expression) veya özel bir koşul.
* Bayraklar (Flags): Koşulun nasıl değerlendirileceğini belirleyen isteğe bağlı parametreler. En yaygın olanları:
* NC (No Case): Büyük/küçük harf duyarsız eşleşme.
* OR (Logical OR): Sonraki RewriteCond ile VEYA mantığıyla bağlanır. Varsayılan olarak tüm koşullar AND ile bağlanır.
* L (Last): Eğer bu koşul geçerliyse, diğer tüm sonraki RewriteCond veya RewriteRule direktiflerini atla.
* F (Forbidden): Eğer bu koşul geçerliyse, 403 Forbidden hatası döndür.
* R (Redirect): Eğer bu koşul geçerliyse, bir yönlendirme yap.
Örnek RewriteCond Kullanımları:
* Belirli bir ana bilgisayar adını kontrol etme:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
* Dosyanın veya dizinin var olup olmadığını kontrol etme:
RewriteCond %{REQUEST_FILENAME} !-f # İstenen yol bir dosya değilse
RewriteCond %{REQUEST_FILENAME} !-d # İstenen yol bir dizin değilse
Burada !-f “eğer bir dosya değilse”, !-d “eğer bir dizin değilse” anlamına gelir.
RewriteRule (Yeniden Yazma Kuralı)
RewriteRule, mod_rewrite‘ın kalbidir. Gelen URL’yi belirli bir desene göre eşleştirir ve ardından başka bir URL’ye dönüştürür.
Sözdizimi:
RewriteRule Desen YerineKoyma [Bayraklar]
* Desen (Pattern): Gelen URL yolunu eşleştirmek için kullanılan düzenli ifadedir. Bu desen, DocumentRoot‘a göre göreceli olarak verilir (yani, ana bilgisayar adı ve protokol hariç).
* YerineKoyma (Substitution): Desen eşleştiğinde URL’nin hangi değere dönüştürüleceğini belirler. Bu, mutlak bir URL, göreceli bir yol veya dinamik olarak oluşturulmuş bir URL olabilir.
* Bayraklar (Flags): Kuralın nasıl uygulanacağını belirleyen isteğe bağlı parametreler. En yaygın olanları:
* L (Last): Bu kural eşleşirse, sonraki tüm RewriteRule direktiflerini atla ve işlemi sonlandır. Bu, sonsuz döngüleri önlemek ve belirli bir kuralın öncelikli olmasını sağlamak için çok önemlidir.
* R (Redirect) veya R=301, R=302: Tarayıcıya bir HTTP yönlendirmesi (redirect) gönderir. R varsayılan olarak 302 (geçici) yönlendirme yapar. R=301 kalıcı yönlendirme (Moved Permanently) için kullanılır ve SEO açısından önemlidir.
* NC (No Case): Desen eşleştirmesinde büyük/küçük harf duyarsızlığı.
* QSA (Query String Append): Yeni URL’ye orijinal sorgu dizesini (query string) ekler. Eğer belirtilmezse, sorgu dizesi kaybolabilir.
* PT (Pass Through): Yeniden yazılan URL’nin dahili bir alt isteğe dönüştürülmesini sağlar. Genellikle mod_proxy ile birlikte kullanılır.
* E=VAR:VALUE (Set Environment Variable): Bir ortam değişkeni ayarlar.
* DPI (Discard Path Info): Yeniden yazılan URL’ye eklenen tüm yol bilgilerini atar.
Düzenli İfadeler (Regular Expressions) Temelleri:
mod_rewrite kurallarının gücü, düzenli ifadelerin doğru kullanımıyla ortaya çıkar. İşte bazı temel regex öğeleri:
* ^: Dizinin başlangıcı.
* $: Dizinin sonu.
* .: Herhangi bir tek karakter (satır sonu hariç).
: Önceki karakterden sıfır veya daha fazla eşleşme.
* +: Önceki karakterden bir veya daha fazla eşleşme.
* ?: Önceki karakterden sıfır veya bir eşleşme (isteğe bağlı).
* (): Eşleşen bir grubu yakalamak için kullanılır. Yakalanan değerlere RewriteRule‘da $1, $2, vb. ile erişilir. RewriteCond‘da ise %1, %2, vb. ile erişilir.
* []: Köşeli parantez içindeki karakterlerden herhangi biriyle eşleşir (örn: [a-z0-9]).
* |: VEYA operatörü (örn: (cat|dog)).
* \: Özel karakterleri kaçış karakteri olarak kullanır (örn: \. bir nokta karakteriyle eşleşir, . ise herhangi bir karakterle).
Örnek RewriteRule Kullanımı:
RewriteRule ^urunler/([0-9]+)$ urun.php?id=$1 [L,QSA]
Bu kural:
* ^urunler/([0-9]+)$ deseniyle eşleşir. Yani, “urunler/” ile başlayan ve ardından bir veya daha fazla sayısal karakterle biten bir URL’yi (örn: /urunler/123) yakalar.
* ([0-9]+) ifadesi, sayısal karakter grubunu yakalar ve $1 olarak yerine koyma dizesinde kullanılabilir hale getirir.
* urun.php?id=$1 ifadesi, gelen isteği urun.php?id=123 şeklinde dahili olarak yeniden yazar.
* [L,QSA] bayrakları, bu kuralın son olduğunu ve varsa orijinal sorgu dizesini eklemesini sağlar.
Yaygın Yeniden Yazma Senaryoları ve Örnekleri
Şimdi mod_rewrite‘ın gücünü gösteren bazı pratik örneklere geçelim. Bu örnekler, .htaccess dosyalarına veya sanal ana bilgisayar konfigürasyonunuza eklenebilir.
1. HTTP’den HTTPS’e Yönlendirme (Kalıcı)
Web sitenizin güvenliğini sağlamak ve SEO sıralamasını iyileştirmek için tüm trafiği HTTPS’e yönlendirmek önemlidir.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
* RewriteCond %{HTTPS} off: Eğer gelen istek HTTPS protokolü üzerinden gelmiyorsa (yani HTTP ise).
RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]: Tüm gelen istekleri (^(.*)$) HTTPS versiyonuna yönlendir (https://%{HTTP_HOST}%{REQUEST_URI}). L (Last) bayrağı, başka kuralın işlenmesini durdurur. R=301 kalıcı (Moved Permanently) yönlendirme yapar.
2. www Olmayan Adresi www’lu Adrese Yönlendirme
Web sitenizin kanonik (tercih edilen) versiyonu www.example.com ise, example.com adresine gelen istekleri www içeren versiyona yönlendirebilirsiniz.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [L,R=301]
* RewriteCond %{HTTP_HOST} ^example\.com [NC]: Eğer ana bilgisayar adı example.com ile başlıyorsa (büyük/küçük harf duyarsız).
RewriteRule ^(.)$ http://www.example.com%{REQUEST_URI} [L,R=301]: Tüm istekleri www.example.com adresine yönlendir.
3. www’lu Adresi www Olmayan Adrese Yönlendirme
Tersi durumda, example.com adresini tercih ediyorsanız:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com%{REQUEST_URI} [L,R=301]
4. Dost URL’ler Oluşturma (Clean URLs)
Bu, mod_rewrite‘ın en yaygın kullanımlarından biridir. Dinamik bir sayfa olan urun.php?id=123 gibi URL’leri urunler/123 gibi daha okunabilir hale getirir.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^urunler/([0-9]+)/?$ urun.php?id=$1 [L,QSA]
RewriteRule ^kategori/([a-zA-Z0-9_-]+)/?$ kategori.php?slug=$1 [L,QSA]
* İlk iki RewriteCond satırı, istenen URL’nin gerçek bir dosya (-f) veya dizin (-d) olmadığını kontrol eder. Bu, CSS, JS dosyaları veya resimler gibi statik kaynakların yeniden yazılmasını engeller.
* ^urunler/([0-9]+)/?$: /urunler/123 veya /urunler/123/ gibi URL’leri yakalar. ([0-9]+) ile yakalanan sayı $1 olarak urun.php?id=$1‘e aktarılır.
* ^kategori/([a-zA-Z0-9_-]+)/?$: /kategori/teknoloji veya /kategori/bilgisayar-parcalari gibi URL’leri yakalar. ([a-zA-Z0-9_-]+) ile yakalanan slug $1 olarak kategori.php?slug=$1‘e aktarılır.
* [L,QSA]: Kuralın son olduğunu belirtir ve varsa sorgu dizesini ekler.
5. Sondaki Eğik Çizgiyi (Trailing Slash) Kaldırma veya Ekleme
Tutarlı bir URL yapısı için sondaki eğik çizgilerin yönetimi önemlidir.
Sondaki Eğik Çizgiyi Kaldırma:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
* RewriteCond %{REQUEST_FILENAME} !-d: Eğer istek bir dizine ait değilse (çünkü dizinlerin sonunda eğik çizgi olması beklenir).
RewriteRule ^(.)/$ /$1 [L,R=301]: Sondaki eğik çizgiyi kaldırır (örn: /sayfa/ -> /sayfa).
Sondaki Eğik Çizgiyi Ekleme (Dizinler İçin):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
* RewriteCond %{REQUEST_FILENAME} -d: Eğer istek bir dizine aitse.
RewriteRule ^(.[^/])$ /$1/ [L,R=301]: Sondaki eğik çizgiyi olmayan bir dizine ekler (örn: /dizin -> /dizin/).
6. Eski URL’leri Yeni URL’lere Yönlendirme
Web sitenizde sayfa yapılarını değiştirdiğinizde veya içerik taşıdığınızda eski URL’lerin hala çalışır durumda olması veya yeni URL’lere yönlendirilmesi gerekir.
RewriteEngine On
RewriteRule ^eski-sayfa\.html$ /yeni-sayfa [L,R=301]
RewriteRule ^urunler/eski-urun-adi$ /urunler/yeni-urun-adi [L,R=301]
RewriteRule ^makaleler/([0-9]+)\.php$ /blog/$1 [L,R=301]
* Bu örnekler, eski ve yeni URL yapıları arasındaki birebir veya desen tabanlı eşleşmelerle kalıcı yönlendirmeler yapar.
7. Belirli IP Adreslerini Engelleme
İstenmeyen botları veya kötü niyetli kullanıcıları engellemek için IP tabanlı engellemeler yapabilirsiniz.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.100$
RewriteRule ^.*$ - [F]
* RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.100$: Eğer istek 192.168.1.100 IP adresinden geliyorsa.
RewriteRule ^.$ - [F]: Tüm istekleri engelle (- hedef yok, F (Forbidden) 403 hatası döndür).
8. Hotlinking’i Önleme (Resim Hırsızlığını Engelleme)
Başka web sitelerinin sizin sunucunuzdaki resimleri doğrudan kullanmasını (hotlinking) engelleyebilirsiniz.
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
* RewriteCond %{HTTP_REFERER} !^$: İstek bir referer başlığına sahipse (yani doğrudan girilmemişse).
* RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain\.com [NC]: Referer, kendi alan adınız değilse.
* RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]: .jpg, .jpeg, .png, .gif uzantılı dosyalara gelen bu tür istekleri engelle.
mod_rewrite Hata Ayıklama
mod_rewrite kuralları güçlü olduğu kadar karmaşık da olabilir ve yanlış yapılandırıldığında web sitenizde beklenmedik davranışlara veya hatalara yol açabilir. Bu nedenle, hata ayıklama yetenekleri çok önemlidir.
Apache Hata Günlükleri (Error Logs)
Apache’nin hata günlükleri, mod_rewrite ile ilgili sorunları tespit etmenin ilk adımıdır. Ubuntu’da bu günlükler genellikle /var/log/apache2/error.log konumundadır.
Hata günlüklerini daha ayrıntılı hale getirmek için Apache konfigürasyonunuzdaki LogLevel ayarını debug olarak değiştirebilirsiniz. Bu, mod_rewrite‘ın dahili işlemlerini günlüğe kaydetmesini sağlar.
# /etc/apache2/apache2.conf veya sanal ana bilgisayarınızda
LogLevel debug
LogLevel ayarını değiştirdikten sonra Apache’yi yeniden başlatmanız gerekir:
sudo systemctl restart apache2
debug seviyesi çok fazla çıktı üretebileceğinden, hata ayıklama bittikten sonra bu ayarı warn veya info gibi daha düşük bir seviyeye geri getirmeyi unutmayın.
Apache 2.4 ve sonraki sürümlerde RewriteLog ve RewriteLogLevel direktifleri kullanımdan kaldırılmıştır. Bunun yerine LogLevel debug kullanılarak mod_rewrite olayları standart hata günlüğüne yazılır.
Tarayıcı Geliştirici Araçları
Tarayıcınızın geliştirici araçlarındaki “Network” (Ağ) sekmesi, HTTP isteklerini ve yanıtlarını incelemek için harika bir araçtır. Özellikle R bayrağı ile yapılan yönlendirmeleri (301, 302 durum kodları) ve URL’nin nasıl değiştiğini görmek için kullanışlıdır.
Çevrimiçi Regex Test Araçları
Düzenli ifadeler karmaşık olabilir. Rewrite kurallarınızdaki desenleri test etmek için regex101.com veya regexr.com gibi çevrimiçi regex test araçlarını kullanabilirsiniz. Bu araçlar, deseninizin belirli bir dizeyle nasıl eşleştiğini görsel olarak görmenizi sağlar ve yakalanan grupları (örn. $1, $2) gösterir.
Performans ve En İyi Uygulamalar
mod_rewrite güçlüdür ancak yanlış kullanıldığında performans sorunlarına yol açabilir.
.htaccess vs. Sunucu Konfigürasyonu
Performans açısından, mod_rewrite kurallarını doğrudan sanal ana bilgisayar konfigürasyon dosyalarınıza (/etc/apache2/sites-available/*.conf) yazmak, .htaccess dosyalarına yazmaktan daha verimlidir. Her istekte Apache’nin .htaccess dosyalarını aramasını ve işlemesini gerektirmez. Mümkün olduğunca .htaccess kullanımından kaçının veya sadece geliştirme ortamlarında kullanın.
Kural Sayısını Minimize Edin
Çok sayıda karmaşık RewriteRule ve RewriteCond direktifi, Apache’nin her isteği işlemesi için daha fazla CPU zamanı harcamasına neden olabilir. Gereksiz kurallardan kaçının ve kurallarınızı mümkün olduğunca sade tutmaya çalışın.
L (Last) Bayrağını Akıllıca Kullanın
L bayrağı, bir kuralın eşleştiğinde diğer kuralların işlenmesini durdurur. Bu, hem performansı artırabilir hem de istenmeyen kural çakışmalarını önleyebilir. Kurallarınızı yazarken L bayrağının nerede gerekli olduğunu dikkatlice düşünün.
Yorum Satırları Kullanın
Kurallarınızın ne işe yaradığını açıklayan yorum satırları eklemek, gelecekte sizin veya başka bir geliştiricinin kuralları anlamasını ve bakımını yapmasını kolaylaştırır. Yorum satırları # ile başlar.
# HTTP'den HTTPS'e yönlendirme
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Sonsuz Döngülerden Kaçının
Yanlış yapılandırılmış bir RewriteRule, sürekli olarak kendini yeniden yazarak bir sonsuz döngüye neden olabilir. Bu, tarayıcının “Too many redirects” hatası vermesine veya sunucunun kaynaklarının tükenmesine yol açar. Kurallarınızı test ederken bu duruma dikkat edin. Genellikle RewriteCond %{REQUEST_FILENAME} !-f ve RewriteCond %{REQUEST_FILENAME} !-d gibi koşullar, sonsuz döngüleri önlemeye yardımcı olur.
Sonuç
mod_rewrite, Apache web sunucusunun en güçlü ve esnek modüllerinden biridir. URL’leri yeniden yazma ve yönlendirme yeteneği sayesinde, web sitelerinizin kullanıcı dostu, SEO uyumlu ve güvenli olmasını sağlayabilirsiniz. Ubuntu 18.04 üzerinde Apache ile mod_rewrite‘ı etkinleştirmek, yapılandırmak ve kullanmak, yukarıda ayrıntılarıyla açıklanan adımlarla oldukça basittir.
Bu makalede ele alınan temel direktifler (RewriteEngine, RewriteCond, RewriteRule), düzenli ifadelerin kullanımı ve yaygın senaryo örnekleri, mod_rewrite‘ın sunduğu imkanlara kapsamlı bir bakış açısı sunmaktadır. Hata ayıklama ipuçları ve en iyi uygulamalar, karşılaşabileceğiniz sorunları çözmenize ve kurallarınızı verimli bir şekilde yönetmenize yardımcı olacaktır.
Unutmayın ki mod_rewrite‘ın tam potansiyelini anlamak ve kullanmak, düzenli ifadeler hakkında sağlam bir bilgi ve deneme-yanılma pratiği gerektirir. Kurallarınızı her zaman dikkatlice test edin ve sunucunuzun performansını gözlemleyin. Bu güçlü araçla web projelerinizi bir sonraki seviyeye taşıyabilirsiniz.