<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
<!-- English Revision: 810189 -->
<!-- =====================================================
 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
   Reviewed by: Orhan Berent <berent belgeler.org>
========================================================== -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="env.xml.meta">

  <title>Apache’de Ortam Değişkenleri</title>

  <summary>
    <p>Apache HTTP Sunucusunda bilgiyi değişkenlerde saklamak için <em>ortam
      değişkenleri</em> adı verilen bir mekanizma bulunur. Saklanan bu bilgi
      erişim denetimi, günlük kaydı gibi çeşitli işlemleri denetlemekte
      kullanılabilir. Değişkenler ayrıca, CGI betikleri gibi harici
      uygulamalarla iletişim mekanizması olarak da kullanılabilir. Bu belgede
      bu değişkenler üzerindeki işlemlere ve kullanım şekillerine
      değinilmiştir.</p>

    <p>Bu değişkenlere <em>ortam değişkenleri</em> dense de işletim sisteminin
      ortam değişkenleri gibi değillerdir. Bunlar sadece Apache ortamında
      geçerli değişkenler olup işletim sisteminin bu değişkenlerden haberi
      olmaz. Sadece CGI betikleri ve SSI sayfaları gibi harici uygulamalar
      tarafından üretilen ortam değişkenleri sistem ortamının değişkenleri
      haline gelirler. İşletim sistemi ortamına çalışmakta olan sunucudan
      müdahale etmek isterseniz işletim sisteminizin kabuğu tarafından sağlanan
      standart ortam müdahale mekanizmalarını kullanmalısınız.</p>
  </summary>

  <section id="setting">
    <title>Ortam Değişkenlerinin Atanması</title>
    <related>
      <modulelist>
        <module>mod_env</module>
        <module>mod_rewrite</module>
        <module>mod_setenvif</module>
        <module>mod_unique_id</module>
      </modulelist>
      <directivelist>
        <directive module="mod_setenvif">BrowserMatch</directive>
        <directive module="mod_setenvif">BrowserMatchNoCase</directive>
        <directive module="mod_env">PassEnv</directive>
        <directive module="mod_rewrite">RewriteRule</directive>
        <directive module="mod_env">SetEnv</directive>
        <directive module="mod_setenvif">SetEnvIf</directive>
        <directive module="mod_setenvif">SetEnvIfNoCase</directive>
        <directive module="mod_env">UnsetEnv</directive>
      </directivelist>
    </related>

    <section id="basic-manipulation">
        <title>Temel Ortamda Değişiklik</title>

        <p>Apache ortamında bir ortam değişkenine müdahale etmenin en temel
          yolu hiçbir koşula tabi olmayan <directive module="mod_env"
          >SetEnv</directive> yönergesini kullanmaktır. Bu değişkenleri Apache
          başlatılırken sistem ortam değişkenleri haline getirmek için
          <directive module="mod_env">PassEnv</directive> yönergesi
          kullanılabilir.</p>

    </section>
    <section id="conditional">
        <title>İsteğe Bağlı Şartlı Atamalar</title>

        <p>Esnekliği arttırmak için, <module>mod_setenvif</module> modülü ile
          isteğin özelliklerine uygun olarak her isteğe özel değişkenler
          atayabilmek mümkün kılınmıştır. Örneğin, bir değişken sadece isteği
          yapan tarayıcıya özgü bir değerle veya sadece belli bir başlık
          alanınına bağlı olarak atanabilir. Daha da esnek bir mekanizma,
          ortam değişkeni atamak için <code>[E=...]</code> seçeneğinin
          kullanıldığı <module>mod_rewrite</module> modülünün <directive
          module="mod_rewrite" >RewriteRule</directive> yönergesi ile
          sağlanmıştır.</p>

    </section>
    <section id="unique-identifiers">
        <title>Eşsiz Betimleyiciler</title>

        <p>Son olarak, <module>mod_unique_id</module> <code>UNIQUE_ID</code>
          ortam değişkenine her istek için o isteğin çok özel koşullar altında
          tüm diğer istekler arasında eşsizliğini garanti edecek bir değer
          atar.</p>

    </section>
    <section id="standard-cgi">
        <title>Standart CGI Değişkenleri</title>

        <p>Apache yapılandırmasıyla atanan ve kabuğa aktarılan ortam
          değişkenlerinden başka <a href="http://www.w3.org/CGI/">CGI
          Belirtimi</a>nin gerektirdiği istekler hakkında temel bilgileri
          içeren ortam değişkenlerinin CGI betikleri ve SSI sayfalarınca
          atanabilmesi sağlanmıştır.</p>

    </section>
    <section id="caveats">
        <title>Bazı Yetersizlikler</title>

        <ul>
          <li>Standart CGI değişkenlerini ortam değişkenlerine müdahale
            yönergelerini kullanarak değiştirmek veya geçersiz kılmak mümkün
            değildir.</li>

          <li>CGI betiklerini çalıştırmak için <program>suexec</program>
            kullanıldığında ortam, CGI betikleri çalıştırılmadan önce
            <em>güvenilir</em> değişkenler kalacak şekilde temizlenir.
            <em>Güvenilir</em> değişken listesi <code>suexec.c</code> içinde
            derleme sırasında tanımlanır.</li>

          <li>Taşınabilirlik adına, ortam değişkenlerinin isimleri sadece
            harfler, rakamlar ve alt çizgi imlerini içerebilir. Bunlara ek
            olarak ismin ilk karakteri bir rakam olmamalıdır. Değişkenler CGI
            betiklerine ve SSI sayfalarına aktarılırken bu sınırlamalara uygun
            olmayan karakterlerin yerlerine alt çizgi imleri konur.</li>

          <li>İsteklerin işleme konması sırasında <directive
            module="mod_env">SetEnv</directive> yönergesi geç çalıştırılır,
            yani <directive module="mod_setenvif">SetEnvIf</directive> ve
            <directive module="mod_rewrite">RewriteCond</directive> gibi
            yönergeler <directive module="mod_env">SetEnv</directive> ile
            atanan değişken değerlerini görmezler.</li>
        </ul>
    </section>
  </section>
  <section id="using">
    <title>Ortam Değişkenlerinin Kullanımı</title>

    <related>
      <modulelist>
        <module>mod_authz_host</module>
        <module>mod_cgi</module>
        <module>mod_ext_filter</module>
        <module>mod_headers</module>
        <module>mod_include</module>
        <module>mod_log_config</module>
        <module>mod_rewrite</module>
      </modulelist>
      <directivelist>
        <directive module="mod_authz_host">Allow</directive>
        <directive module="mod_log_config">CustomLog</directive>
        <directive module="mod_authz_host">Deny</directive>
        <directive module="mod_ext_filter">ExtFilterDefine</directive>
        <directive module="mod_headers">Header</directive>
        <directive module="mod_log_config">LogFormat</directive>
        <directive module="mod_rewrite">RewriteCond</directive>
        <directive module="mod_rewrite">RewriteRule</directive>
      </directivelist>
    </related>

    <section id="cgi-scripts">
        <title>CGI Betikleri</title>

        <p>Ortam değişkenlerinin başlıca amaçlarından biri CGI betikleriyle
          iletişim kurmaktır. Yukarıda bahsedildiği gibi CGI betiklerine
          aktarılan ortam Apache yapılandırmasında atanan değişkenlere ek
          olarak istek hakkında standart temel bilgileri de içerir. Bu konuda
          ayrıntılı bilgi edinmek için <a href="howto/cgi.html">CGI
          Öğreticisi</a>ne bakabilirsiniz.</p>

    </section>
    <section id="ssi-pages">
        <title>SSI Sayfaları</title>

        <p>Sunucu tarafında <module>mod_include</module> modülünün
          <code>INCLUDES</code> süzgeci ile yorumlanan SSI sayfalarında ortam
          değişkenleri <code>echo</code> elemanı ile basılabilir ve sayfayı
          isteğin özelliklerine uygun olarak oluşturmak için ortam
          değişkenleri akış denetim elemanları içinde kullanılabilir. Apache
          ayrıca, yukarıda bahsedildiği gibi standart CGI ortam değişkenli SSI
          sayfalarını da sağlayabilmektedir. Daha ayrıntılı bilgi edinmek için
          <a href="howto/ssi.html" >SSI Öğreticisi</a>ne bakabilirsiniz.</p>

    </section>
    <section id="access-control">
        <title>Erişim Denetimi</title>

        <p><code>allow from env=</code> ve <code>deny from env=</code>
          yönergeleri sayesinde ortam değişkenlerine dayalı olarak sunucuya
          erişim denetim altında tutulabilir. Bunlar <directive
          module="mod_setenvif">SetEnvIf</directive> yönergesi ile birlikte
          kullanılmak suretiyle sunucuya erişim isteğin özelliklerine bağlı
          olarak daha esnek bir tarzda denetlenebilir. Örneğin, belli bir
          tarayıcının sunucuya erişimi bu yönergelerle engellenebilir.</p>

    </section>
    <section id="logging">
        <title>Şartlı Günlük Kaydı</title>

        <p>Ortam değişkenleri <directive module="mod_log_config"
          >LogFormat</directive> yönergesinin <code>%e</code> seçeneği
          kullanılarak erişim günlüğüne kaydedilebilir. Bundan başka,
          <directive module="mod_log_config">CustomLog</directive> yönergesi
          sayesinde isteklerin günlüğe kaydedilip kaydedilmeyeceğine ortam
          değişkenlerine dayalı olarak karar verilmesi sağlanabilir. Bunlar
          <directive module="mod_setenvif">SetEnvIf</directive> yönergesi ile
          birlikte kullanılmak suretiyle günlük kayıtları isteğin
          özelliklerine bağlı olarak daha esnek bir tarzda denetlenebilir.
          Örneğin, <code>gif</code> uzantılı dosyalar için yapılan isteklerin
          günlüğe kaydedilmemesi veya sadece alt ağınızın dışından gelen
          isteklerin günlüğe kaydedilmesini isteyebilirsiniz.</p>

    </section>
    <section id="response-headers">
        <title>Şartlı Yanıt Başlıkları</title>

        <p><directive module="mod_headers">Header</directive> yönergesi belli
          bir yanıt başlığının istemciye gönderilip gönderilmeyeceğine belli
          bir ortam değişkeninin varlığına bakarak karar vermek için
          kullanılabilir. Böylece örneğin, belli bir başlığın istemciye
          gönderilmesine istemciden belli bir başlığın alınıp alınmadığına
          bağlı olarak karar verilebilir.</p>

    </section>

    <section id="external-filter">
        <title>Harici Süzgeçlerin Etkinleştirilmesi</title>

        <p><module>mod_ext_filter</module> tarafından yapılandırılan harici
          süzgeçler <directive module="mod_ext_filter"
          >ExtFilterDefine</directive> yönergesinin <code>disableenv=</code> ve
          <code>enableenv=</code> seçenekleri kullanılarak bir ortam
          değişkenine bağlı olarak etkinleştirilebilir.</p>
    </section>

    <section id="url-rewriting">
        <title>URL Kurgulaması</title>

        <p><directive module="mod_rewrite">RewriteCond</directive>
          yönergesinin <em>SınamaDizgesi</em> olarak kullanılan
          <code>%{ENV:<em>değişken</em>}</code> biçemi
          <module>mod_rewrite</module> yeniden yazma motorunun ortam
          değişkenlerine bağlı kararlar almasını mümkün kılar. Yalnız şuna
          dikkat ediniz: <module>mod_rewrite</module>’ta <code>ENV:</code>
          öneki kullanılmadan belirtilen değişkenler ortam değişkenleri
          değillerdir. Onlar <module>mod_rewrite</module>’a özgü diğer
          modüllerden erişilemeyen özel değişkenlerdir.</p>
    </section>
  </section>

  <section id="special">
    <title>Özel Amaçlı Ortam Değişkenleri</title>

        <p>Birlikte çalışabilirlik sorunları Apache’nin belli istemcilerle
          veri alışverişi sırasında davranışını değiştirmesini gerektirebilir.
          Genellikle <directive module="mod_env" >SetEnv</directive> ve
          <directive module="mod_env" >PassEnv</directive> yönergelerinden
          başka <directive module="mod_setenvif" >BrowserMatch</directive>
          gibi yönergelerle ortam değişkenleri atanarak bunu sağlayan
          mekanizmaların olabildiğince esnek davranabilmesi sağlanabilir.</p>

    <section id="downgrade">
        <title><code>downgrade-1.0</code></title>

        <p>İstek, daha yüksek bir HTTP protokolüyle yapılmış olsa bile
          HTTP/1.0 isteği olarak ele alınır.</p>

    </section>
    <section id="force-gzip">
        <title><code>force-gzip</code></title>
          <p><code>DEFLATE</code> süzgeci etkinse tarayıcının tercih ettiği
            kodlama koşulsuz olarak yoksayılarak sıkıştırılmış çıktı
            gönderilir.</p>
    </section>
    <section id="force-no-vary">
        <title><code>force-no-vary</code></title>

        <p>İstemciye gönderilmeden önce yanıttan <code>Vary</code> alanının
          çıkarılmasına sebep olur. Bazı istemciler bu alanı gerektiği gibi
          yorumlayamazlar, bu değişken atanarak bu sorunla karşılaşılmamaya
          çalışılır. Bu değişkenin atanması ayrıca
          <strong>force-response-1.0</strong> değişkeninin de atanmasına sebep
          olur.</p>

    </section>
    <section id="force-response">
        <title><code>force-response-1.0</code></title>

      <p>HTTP/1.0 isteği yapan istemcilere HTTP/1.0 yanıtı verilmesini zorunlu
        kılar. AOL vekillerindeki bir sorun nedeniyle gerçeklenmiştir. Bazı
        HTTP/1.0 istemciler HTTP/1.1 yanıtlarında doğru davranmayabilirler; bu
        değişken atanarak bunların sorunları giderilebilir.</p>

    </section>

    <section id="gzip-only-text-html">
        <title><code>gzip-only-text/html</code></title>

        <p>Bu değişkene "1" değeri atandığında <code>text/html</code>’den
          farklı içerik türleri için <module>mod_deflate</module> modülü
          tarafından sağlanan <code>DEFLATE</code>  çıktı süzgeci iptal
          edilir. Sıkıştırılmış olarak saklanan dosyalar kullanıyorsanız bu
          değişkeni <module>mod_negotiation</module> modülü de dikkate alır
          (kimliğine bakarak sadece gzip için değil, tüm kodlamalar için bunu
          yapar).</p>
    </section>

    <section id="no-gzip"><title><code>no-gzip</code></title>

        <p>Bu değişken atandığında, <module>mod_deflate</module> modülünün
          <code>DEFLATE</code> süzgeci kapatılır ve
          <module>mod_negotiation</module> modülü kodlanmış kaynak teslimatını
          reddeder.</p>

    </section>
    <section id="no-cache"><title>no-cache</title>
        <p><em>2.2.12'den sonraki sürümlerde kullanılabilmektedir.</em></p>
        
        <p>Atandığı takdirde, <module>mod_cache</module> başka bir
          önbelleklenebilir yanıtı kaydetmeyecektir. Bu ortam değişkeni, bir
          yanıtın geçerli bir istek için evvelce önbelleğe alınmış olduğu
          anlamına gelmez.</p>

    </section>

    <section id="nokeepalive">
        <title><code>nokeepalive</code></title>

        <p>Bu değişken atandığında, <directive module="core"
          >KeepAlive</directive> yönergesi iptal edilir.</p>

    </section>

    <section id="prefer-language">
        <title><code>prefer-language</code></title>

        <p>Değer olarak <code>en</code>, <code>ja</code> veya
          <code>x-klingon</code> gibi bir dil kısaltması verilerek atanmışsa
          <module>mod_negotiation</module> modülünün normal davranışını
          değiştirerek belirtilen dilde bir teslimat yapılmaya çalışılır.
          Böyle bir belge yoksa normal <a
          href="content-negotiation.html">uzlaşım</a> süreci uygulanır.</p>

    </section>

    <section id="redirect-carefully">
        <title><code>redirect-carefully</code></title>

        <p>İstemciye bir yönlendirme gönderirken sunucuyu daha dikkatli olmaya
          zorlar. Bu genellikle istemcinin yönlendirmeler konusunda sorunlu
          olduğu bilindiği takdirde yararlı olur. Bu değişkenin gerçeklenme
          sebebi, dizin kaynaklarına yönlendirmeler için DAV yöntemlerini
          kullanan Microsoft'un WebFolders yazılımındaki bir sorundur.</p>

    </section>

   <section id="suppress-error-charset">
       <title><code>suppress-error-charset</code></title>

    <p><em>2.0.54 sürümünden beri mevcuttur.</em></p>

    <p>Apache bir isteğe bir yönlendirme ile yanıt verdiğinde istemci
      yönlendirmeyi kendiliğinden yapmaz veya yapamazsa kullanıcıya yanıtla
      birlikte gönderilen metin gösterilir. Apache normal olarak bu metni
      ISO-8859-1 ile kodlar.</p>

    <p>Ancak, yönlendirmenin yapıldığı sayfa farklı bir karakter kümesine
      sahipse bazı tarayıcı sürümleri asıl sayfanın karakter kodlaması yerine
      yönlendirmenin kodlamasını kullanmaya çalışırlar. Bu özellikle Yunanca
      gibi dillerde hedef sayfanın hatalı yorumlanmasına yol açar.</p>

    <p>Bu ortam değişkeninin atanması Apache’nin yönlendirme için karakter
      kümesi belirtmemesini sağlamak suretiyle hatalı tarayıcıların hedef
      sayfayı yanlış karakter kodlamasıyla yorumlamasını önler.</p>

    <note type="warning">
      <title>Güvenlik Uyarısı</title>

      <p>Hata sayfalarının bir karakter kümesi belirtilmeksizin yollanması,
        HTTP/1.1 belirtimine uymayan ve karakter kümesini içeriğe bakarak
        tahmin etmeye çalışan tarayıcılarda (MSIE) karşı siteden betik
        saldırısı yorumuna sebep olabilir.  Girdi verisindeki UTF-7 içerik
        (istek betimleyici gibi) karşı siteden betik saldırılarını engellemek
        için tasarlanmış normal önceleme mekanizmalarıyla öncelenmeyeceği için
        böyle tarayıcılar UTF-7 karakter kodlaması kullanılarak kolayca
        aldatılabilir.</p>
    </note>

   </section>

   <section id="proxy"><title><code>force-proxy-request-1.0</code>,
    <code>proxy-nokeepalive</code>, <code>proxy-sendchunked</code> ve
    <code>proxy-sendcl</code>, <code>proxy-chain-auth</code>,
    <code>proxy-interim-response</code>, <code>proxy-initial-not-pooled</code>
    </title>

   <p>Bu yönergeler <module>mod_proxy</module> modülünün normal protokol
    davranışını değiştirirler. Daha ayrıntılı bilgi için
    <module>mod_proxy</module> ve <module>mod_proxy_http</module>
    belgelerine bakınız.</p>
   </section>

  </section>

  <section id="examples">
    <title>Örnekler</title>

    <section id="misbehaving">
        <title>Protokolü yanlış yorumlayan tarayıcıların davranışlarının
        değiştirilmesi</title>

        <p>Önceki sürümlerde bilinen istemci davranışlarına karşı önlem olarak
          aşağıdaki satırların <code>httpd.conf</code> içinde bulunması
          önerilirdi. Fakat, böyle tarayıcılar artık ortalıkta görünmediğinden
          bu yapılandırmaya da artık gerek kalmamıştır.</p>

        <example><pre>
#
# Aşağıdaki yönergeler normal HTTP yanıt davranışını değiştirirler.
# İlk yönerge Netscape 2.x ve kendini öyle gösteren tarayıcılar için
# kalıcı bağlantıyı (keepalive) iptal eder. İkinci yönerge ise HTTP/1.1
# protokolü bozuk olan ve 301/302 durum kodlu yönlendirme yanıtları
# kullanıldığında kalıcı bağlantıları gerektiği gibi desteklemeyen
# Microsoft Internet Explorer 4.0b2 içindir.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#
# Aşağıdaki yönergeler HTTP/1.0 yanıtlarından başkasına yabancı olan
# tarayıcılara HTTP/1.1 yanıtlarının gönderilmesini iptal eder.
#
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0</pre>
      </example>

    </section>
    <section id="no-img-log">
        <title>Resim isteklerinin erişim günlüğüne kaydedilmemesi</title>

        <p>Bu örnek resim isteklerinin erişim günlüğüne yazılmasını engeller.
          Bu örnek değiştirilerek belli dizinlerin veya belli konaklardan
          gelen isteklerin günlüğe kaydedilmesini engellemek amacıyla da
          kullanılabilir.</p>

        <example>
          SetEnvIf Request_URI \.gif image-request<br />
          SetEnvIf Request_URI \.jpg image-request<br />
          SetEnvIf Request_URI \.png image-request<br />
          CustomLog logs/access_log common env=!image-request
        </example>

    </section>
    <section id="image-theft">
        <title>“Resim Hırsızlığı” için önlem alınması</title>

        <p>Bu örnekte sunucunuzda bulunmayan sayfalarda sunucunuzdaki
          resimlerin kullanılmasının nasıl önleneceği gösterilmiştir. Bu
          yapılandırma önerilmemekle birlikte nadir durumlarda işe yarar. Tüm
          resimlerin <code>/siteler/resimler</code> dizini altında tutulduğu
          varsayılmıştır.</p>

        <example>
          SetEnvIf Referer "^http://filan\.fesmekan\.dom/" local_referal<br />
          # Referrer bilgisi göndermeyen tarayıcılara izin verelim<br />
          SetEnvIf Referer "^$" local_referal<br />
          &lt;Directory /siteler/resimler&gt;
          <indent>
            Order Deny,Allow<br />
            Deny from all<br />
            Allow from env=local_referal
          </indent>
          &lt;/Directory&gt;
        </example>

        <p>Bu teknik hakkında daha ayrıntılı bilgi edinmek için ServerWatch
          üzerindeki  "<a
          href="http://www.serverwatch.com/tutorials/article.php/1132731"
          >Diğer sitelerin sizin resimlerinizle donatılmasını engellemek</a>"
          belgesine bakınız.</p>
    </section>
  </section>
</manualpage>
