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.