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!