Belirli URL’leri .htaccess Yönlendirmelerinde Hariç Tutma Nasıl Yapılır
URL yönlendirmelerini etkili bir şekilde yönetmek, özellikle CakePHP gibi çerçeveler üzerine inşa edilmiş bir web uygulaması için kritik öneme sahiptir. Ancak bazı durumlarda, belirli dizinlerin veya URL’lerin yönlendirme kurallarınızdan etkilenmemesini isteyebilirsiniz. Bu blog, .htaccess
dosyanızı belirli URL’lerin yönlendirilmemesi için nasıl ayarlayacağınızı anlatacaktır. İşte bunu etkili bir şekilde yapmanın yolları.
Problemi Anlamak
.htaccess
dosyanızı yapılandırdığınızda genellikle URL’lerin nasıl yeniden yazılacağını yöneten direktifler belirlersiniz. Örneğin, tipik bir CakePHP kurulumu ile uygulamanıza yapılan her gelen isteğin app/webroot/index.php
dosyasına yönlendirilmesi sağlanır ve bu dosya hangi kontrolcünün ve eylemin çağrılacağını belirler. Ancak, bu durum, statik kaynaklarınız veya bu şekilde işlenmesini istemediğiniz diğer dizinleriniz varsa sorun yaratabilir.
Örneğin, dosya yapınız şu şekilde olabilir:
/appRoot/.htaccess
app/
static/
Bu temel kurallar ile:
RewriteBase /appRoot
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
/appRoot/*
yolundaki her istek app/webroot/index.php
dosyasına yönlendirilecektir, bu her zaman istenen bir durum değildir. static/
gibi bazı klasörlerin yeniden yazılmasını hariç tutmanız gerekebilir.
URL’leri Hariç Tutmanın Yaygın Yöntemi
Bunu yapmanın bir yolu, .htaccess
dosyanızda şu satırları içerebilir:
RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]
Bu kurallar basit gibi görünse de, CakePHP uygulamanız için işlenmesi gereken geçerli isteklere atlanma riski taşır. Bunun nedeni, koşulunuzun yanlışlıkla Cake kontrolcüsü tarafından işlenmesi gereken tüm isteklerle eşleşmesidir.
Çözüm: Yeniden Yazım Kurallarını Düzeltmek
Bu sorunu önlemek için, yalnızca belirtilen dizinlerin hariç tutulduğundan emin olmak için yeniden yazım kurallarınızı gözden geçirmeniz gerekmektedir. İşte etkili bir çözüm:
Adım 1: Belirli Dizinleri Hariç Tutun
Dizini doğru bir şekilde hariç tutmak için aşağıdaki gibi bir kural kullanabilirsiniz:
RewriteRule ^(static|otherDir).* - [NC,L]
Adım 2: Diğer İsteklerin CakePHP Tarafından İşlenmesini Sağlayın
Bu hariç tutma uygulanınca, diğer tüm istekleri CakePHP uygulamanıza güvenle yönlendirebilirsiniz:
# Diğer tüm istekler Cake'e yönlendirilecektir
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
Tam .htaccess Yapılandırması Örneği
.htaccess
dosyanızdaki son yapılandırma şu şekilde olabilir:
RewriteEngine On
# Belirli dizinleri yeniden yazılmaktan hariç tutun
RewriteRule ^(static|otherDir).* - [NC,L]
# Diğer tüm istekleri CakePHP uygulamasına yönlendirin
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
Sonuç
Bu belirtilen yeniden yazım koşullarını izleyerek, hangi URL’lerin yönlendirilip hangilerinin yönlendirilmediğini başarıyla yöneterek uygulama mantığınızla ilgili sorunlardan kaçınabilirsiniz. Yapılan değişikliklerden sonra her şeyin beklendiği gibi çalıştığından emin olmak için doğru testlerin yapılmasının önemli olduğunu unutmayın.
Bu optimize edilmiş kurallarla, CakePHP uygulamanız artık belirli dizinleri istenmeyen yönlendirmeler olmadan düzgün bir şekilde işleyebilmelidir.