Apache’de DocumentRoot’un Arkasında Dosyaları Yüklemek için mod_rewrite
‘ı Etkili Bir Şekilde Nasıl Kullanılır
Apache web sunucularıyla çalışırken, DocumentRoot dizininin dışında bulunan dosyaları sunma ihtiyacıyla karşılaşabilirsiniz. Bu durum özellikle karmaşık ve “İstenen URL bu sunucuda bulunamadı.” gibi can sıkıcı hatalara yol açabilir. Bu blog yazısında, DocumentRoot’un arkasında dosyaları yüklemek için .htaccess
dosyasını ve mod_rewrite
‘ı doğru bir şekilde nasıl kuracağınızı keşfedeceğiz.
Sorunun Anlaşılması
Aşağıdaki klasör yapısını göz önünde bulundurun:
home/
webroot/
other_files/
Diyelim ki webroot
dizininde aşağıdaki kodla dolu bir .htaccess
dosyanız var:
RewriteEngine on
RewriteRule ^(.*)$ /home/other_files/$1
Eğer http://example.com/file.html adresine erişmeye çalışırsanız, şu hatayı görebilirsiniz:
İstenen URL /home/other_files/file.html bu sunucuda bulunamadı.
Bu, Apache’nin other_files
klasöründe bulunan dosyaları nasıl sunacağını bilmediğini gösterir, çünkü bu klasör tanımlanmış DocumentRoot’un dışındadır.
Çözüm
DocumentRoot’un arkasında dosyaları doğru bir şekilde yüklemek için .htaccess
ve mod_rewrite
kullanırken bazı sunucu yapılandırma değişiklikleri yapmanız gerekecek. Bunu net adımlara ayıralım.
Adım 1: Apache Sunucusunu Yapılandırma
Apache’nin other_files
dizininden dosyaları sunmasına izin vermek için, sunucu ayarlarında bir yapılandırma bloğu eklemeniz gerekiyor. Bu genellikle Apache yapılandırma dosyalarında yapılır (.htaccess
dosyasında değil). İşte nasıl yapılacağı:
<Directory "/home/other_files">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Yapılandırmanın Açıklaması:
Options
: Dizinin seçeneklerini kontrol eder (örneğin, dizin listeleme etkinleştirme).AllowOverride
: Hangi direktiflerin.htaccess
ile geçersiz kılınabileceğini tanımlar.Order
: Erişim kontrol sırasını belirtir (önce reddet, sonra izin ver).Deny/Allow
: Hangi IP adreslerinin dizine erişebileceğini ayarlar.
Adım 2: Alias Direktifini Kullanma (İsteğe Bağlı)
Eğer other_files
dizinini doğrudan açmaktan kaçınmak istiyorsanız, bir URL’yi dosyanın gerçek konumuna yönlendiren bir alias oluşturabilirsiniz. İşte şöyle görünebilir:
Alias /doc/ "/home/other_files/"
<Directory "/home/other_files/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Bir alias kullanarak, artık /doc/file.html
gibi bir URL’yi other_files
dizininden dosyaları almak için yeniden yazabilirsiniz.
Adım 3: Apache’yi Yeniden Başlatma
Apache yapılandırmasında bu değişiklikleri yaptıktan sonra, yeni ayarların etkili olabilmesi için sunucuyu yeniden başlatmayı unutmayın:
sudo service apache2 restart
Sonuç
Apache’de DocumentRoot’un dışındaki dizinlerden dosyaları sunmak kesinlikle mümkündür ve doğru yapılandırmalarla gerçekleştirilebilir. Apache sunucu yapılandırmasında direktifleri doğru bir şekilde ayarlayarak veya alias kullanarak, .htaccess
yeniden yazmalarınızın etkili bir şekilde çalışmasını sağlayabilirsiniz.
Hala sorunlar yaşıyorsanız, yapılandırmalarınızı iki kez kontrol edin ve daha fazla ayrıntı için resmi Apache Belgeleri ile iletişime geçmekten çekinmeyin.
Bu adımları takip ederek, Apache sunucu yapılandırmanız içerisinde dosya konumlarını başarıyla yönetirken mod_rewrite
‘ın gücünden yararlanabileceksiniz!