Apache ile Statik Web Sayfalarını Anında Değiştirme Kolaylığı

Tamamen statik HTML sayfalarından oluşan bir web sitesini bakımını yaparken, sık karşılaşılan bir zorluk, gerekli işlevsellik için dinamik değişikliklerin veya dış betiklerin nasıl dahil edileceğidir. Örneğin, Woopra gibi web analitik araçları, her sayfada JavaScript kodunu gömmeyi gerektirir; bu, çok sayıda statik dosya ile çalışırken zahmetli olabilir.

Bu blog yazısında, Apache’nin yeteneklerini kullanarak statik web sayfalarına dinamik unsurları etkili bir şekilde nasıl entegre edeceğimizi keşfedeceğiz.

Zorluk

Şu senaryolardan birinde bulunabilirsiniz:

  • Tamamen statik HTML sayfalarınız var.
  • Web analitiklerini takip etmek için bir JavaScript parçasını dahil etmeniz gerekiyor.
  • Bu kodu her bir dosyaya eklemek pratik değil.

İlk düşünce, süreci otomatikleştirmek için Apache’nin sunucu tarafı içeriklerini (SSI) ve yeniden yazmaları kullanmak olabilir. Ancak, birçoğu tarafından keşfedildiği gibi, bu yaklaşım sık sık yetersiz kalmaktadır.

Örnek Çözüm Denemesi

İlk denemenizin basitleştirilmiş bir özeti şöyle:

  1. Statik HTML sayfaları için istekleri yakalamak üzere Apache yapılandırmanızda mod_rewrite ayarladınız.

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !=test.shtml
    RewriteCond %{IS_SUBREQ} false 
    RewriteRule (.*)\.html test.shtml?$1.html
    
  2. Gerekli JavaScript’i ve orijinal HTML içeriğini dahil etmesi beklenen test.shtml adında bir dosya oluşturduğunuz.

    <script type="text/javascript">
        var XXXXid = 'xxxxxxx';
    </script>
    <script src="http://xxxx.woopra.com/xx/xxx.js"></script>
    
    <!--#set var="page" value="$QUERY_STRING" -->
    <!--#include virtual="$page" -->
    

Ancak, istenen sonuca ulaşmanızı engelleyen sorunlarla karşılaştınız.

Çözüm

Statik dosyaları anında etkili bir şekilde değiştirmek için alternatif yöntem, mod_filter_ext kullanmaktadır. Bu modül, dosyaların dış betikler aracılığıyla işlenmesini sağlar; böylece JavaScript veya diğer dinamik içerikleri sorunsuz bir şekilde ekleyebilirsiniz.

Çözümü Uygulama Adımları

  1. Gerekli Apache Modülünü Etkinleştirin: Apache yapılandırmanızda mod_filter_ext modülünün etkinleştirildiğinden emin olun. Bu modül, belirli dosya türlerini işleyen harici filtre programlarını tanımlamanıza olanak tanır.

  2. Bir Dış Betik Oluşturun: JavaScript kodunuzu HTML sayfalarınıza enjekte edecek kısa bir Perl betiği yazın. İşte temel bir yapı:

    while (<>) {
        s/<html>/\Q<script>....\E/;
        print $_;
    }
    
    • Bu betik, gelen HTML dosyalarını okur ve belirli bir yer tutucuyu JavaScript kodunuzla değiştirir.
  3. Apache’yi Betiği Kullanacak Şekilde Yapılandırın: HTML dosyaları için betiği kayıt etmek üzere Apache yapılandırma dosyanızı güncelleyin. Şöyle bir şey ekleyebilirsiniz:

    SetOutputFilter EXT_FILTER
    FilterDeclare EXT_FILTER
    FilterProvider EXT_FILTER pulse html
    FilterChain EXT_FILTER Perl-script-name
    
  4. Yapılandırmanızı Test Edin: Filtreyi ayarladıktan sonra, doğrudan statik HTML sayfalarınızdan birine erişin. JS kodu, artık çıktıda dinamik olarak dahil edilmelidir.

Ek Araçlar

  • Alternatif olarak, sed gibi komut satırı araçlarını kullanarak benzer şekilde yer değişimleri yapabilirsiniz, ancak bir Perl betiğinin esnekliği uzun vadede daha fazla kontrol sağlayabilir.

Sonuç

Dinamik unsurları statik HTML sayfalarına entegre etmek zor olabilir, ancak doğru Apache modüllerini ve dış betikleri kullanarak, etkili bir şekilde gerçekleştirilebilir. mod_filter_ext veya başka bir yöntem kullanmayı seçseniz de, hedef aynı kalır: iş akışınızı kolaylaştırırken sitenizi işlevsel tutmak.

Bu çözümü uygularken sorularınız olursa ya da zorluklarla karşılaşırsanız, bana ulaşmaktan çekinmeyin!