<?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: 732823 -->
<!-- =====================================================
 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="urlmapping.xml.meta">

  <title>URL’lerin Dosya Sistemi ile Eşleştirilmesi</title>

  <summary>
    <p>Bu belgede, bir istekte belirtilen URL’nin sunulacak dosyanın dosya
      sistemindeki yerini bulmak için Apache tarafından nasıl kullanıldığı
      açıklanmaktadır.</p>
  </summary>

<section id="related"><title>İlgili Modüller ve Yönergeler</title>

<related>
<modulelist>
<module>mod_alias</module>
<module>mod_proxy</module>
<module>mod_rewrite</module>
<module>mod_userdir</module>
<module>mod_speling</module>
<module>mod_vhost_alias</module>
</modulelist>
<directivelist>
<directive module="mod_alias">Alias</directive>
<directive module="mod_alias">AliasMatch</directive>
<directive module="mod_speling">CheckSpelling</directive>
<directive module="core">DocumentRoot</directive>
<directive module="core">ErrorDocument</directive>
<directive module="core">Options</directive>
<directive module="mod_proxy">ProxyPass</directive>
<directive module="mod_proxy">ProxyPassReverse</directive>
<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
<directive module="mod_alias">Redirect</directive>
<directive module="mod_alias">RedirectMatch</directive>
<directive module="mod_rewrite">RewriteCond</directive>
<directive module="mod_rewrite">RewriteRule</directive>
<directive module="mod_alias">ScriptAlias</directive>
<directive module="mod_alias">ScriptAliasMatch</directive>
<directive module="mod_userdir">UserDir</directive>
</directivelist>
</related>
</section>

<section id="documentroot"><title><code>DocumentRoot</code></title>

    <p>Yapılan bir isteğe hangi dosyanın sunulacağına karar verirken
      Apache’nin öntanımlı davranışı istek için URL yolunu (URL’den konak ismi
      ve port ayrıldıktan sonra kalan kısım) alıp bunu yapılandırma dosyasında
      <directive module="core">DocumentRoot</directive> yönergesi ile
      belirtilen dizinin sonuna eklemektir. Bu nedenle, <directive
      module="core">DocumentRoot</directive> altındaki dizinler ve dosyalar
      sitenin dışardan görünen temel belge ağacını oluştururlar.</p>

    <p>Örneğin, <directive module="core">DocumentRoot</directive> yönergesine
      <code>/var/http/html</code> atanmış olsun.
      <code>http://mesela.dom/balıklar/zargana.html</code> şeklindeki bir
      istek için istemciye <code>/var/http/html/balıklar/zargana.html</code>
      dosyası sunulur.</p>

    <p>Apache ayrıca, sunucunun birden fazla konak için istek kabul etmesini
      sağlayan <a href="vhosts/">sanal barındırmaya</a> da muktedirdir. Bu
      durumda her sanal konak için ayrı bir <directive module="core"
      >DocumentRoot</directive> belirtilebileceği gibi sunulacak içeriğin
      istekte bulunulan IP adresi veya konak ismine dayanarak devingen olarak
      saptanmasını sağlayabilen <module>mod_vhost_alias</module> modülüyle
      gelen yönergeler de kullanılabilir.</p>

    <p><directive module="core">DocumentRoot</directive> yönergesi
      yapılandırma dosyanızda ana sunucu için bir tane ve muhtemelen
      oluşturduğunuz her <a href="vhosts/">sanal konak</a> için de birer
      tanedir.</p>
</section>

<section id="outside"><title>Belge Kök Dizini Dışındaki Dosyalar</title>

    <p>Bazen dosya sisteminde doğrudan <directive module="core"
      >DocumentRoot</directive> altında bulunmayan dosyalara da erişim izni
      vermek gerekir. Apache’de bunu sağlamanın çeşitli yolları vardır. Unix
      sistemlerinde sembolik bağlar sayesinde dosya sisteminin farklı
      yerlerindeki dosyaları ve dizinleri <directive module="core"
      >DocumentRoot</directive> altındaymış gibi göstermek mümkündür.
      <directive module="core">Options</directive> yönergesine değer olarak
      <code>FollowSymLinks</code> veya <code>SymLinksIfOwnerMatch</code>
      atanmadıkça Apache olası güvenlik açıklarına karşı öntanımlı olarak
      sembolik bağları izlemez.</p>

    <p>Bundan başka, dosya sisteminin farklı parçalarını belge kök dizini
      altında göstermek için <directive module="mod_alias">Alias</directive>
      yönergesi de kullanılabilir. Örneğin,</p>

    <example>Alias /belgeler /var/http</example>

    <p>yapılandırması ile
      <code>http://mesela.dom/belgeler/dizin/dosya.html</code> URL’si için
      dosya sistemindeki <code>/var/http/dizin/dosya.html</code> dosyası
      sunulacaktır. Hedef dizindeki dosyaları birer <glossary ref="cgi"
      >CGI</glossary> betiği olarak imlemesi dışında <directive
      module="mod_alias" >ScriptAlias</directive> yönergesi de aynı şekilde
      çalışır.</p>

    <p>Biraz daha fazla esnekliğin gerektiği durumlarda  <glossary
      ref="regex">düzenli ifadelere</glossary> dayalı eşleşmeler sağlamak
      üzere <directive module="mod_alias">AliasMatch</directive> ve <directive
      module="mod_alias" >ScriptAliasMatch</directive> yönergelerinin gücünden
      yararlanılabilir. Örneğin,</p>

    <example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
      /home/$1/cgi-bin/$2</example>

    <p>satırı sayesinde <code>http://mesela.dom/~user/cgi-bin/betik.cgi</code>
      URL’si <code>/home/user/cgi-bin/betik.cgi</code> dosyası ile
      eşleştirilir ve dosya bir CGI betiği olarak çalıştırılırdı.</p>
</section>

<section id="user"><title>Kullanıcı Dizinleri</title>

    <p>Geleneksel olarak Unix sistemlerinde belli bir kullanıcının (örn,
      <em>birisi</em>) ev dizinine <code>~birisi/</code> şeklinde atıfta
      bulunulabilir. <module>mod_userdir</module> modülü bu özelliği site
      üzerinden kullanıcıların ev dizinlerindeki dosyaları kişisel sayfalar
      olarak sunmalarını sağlamak üzere kullanır. Örnek:</p>

    <example>http://mesela.dom/~birisi/dosya.html</example>

    <p>Güvenlik sebebiyle kullanıcıların ev dizinlerine doğrudan HTTP erişimi
      vermek uygun olmaz. Bu bakımdan, kullanıcının ev dizini altında HTTP
      erişimi verilecek dosyaların bulunduğu dizini belirtmek için <directive
      module="mod_userdir">UserDir</directive> yönergesi sağlanmıştır.
      Öntanımlı olan <code>Userdir public_html</code> yapılandırması ile
      yukarıdaki gibi bir URL kullanıcının ev dizini (<code>/etc/passwd</code>
      dosyasında belirtilir) <code>/home/birisi/</code> altında yer alan
      <code>/home/birisi/public_html/dosya.html</code> dosyası ile
      eşleşirdi.</p>

    <p>Ev dizininin yerinin <code>/etc/passwd</code> dosyasında belirtilmediği
      sistemlerde kullanılmak üzere <code>Userdir</code> yönergesinin başka
      kullanım şekilleri de vardır.</p>

    <p>Bazı kişiler (genellikle URL üzerinde <code>%7e</code> olarak
      kodlanması sebebiyle) "~" simgesini biçimsiz bulabilir ve kullanıcı
      dizinlerini imlemek için başka bir karakter kullanmayı tercih
      edebilirler. Bu işlevsellik <module>mod_userdir</module> tarafından
      desteklenmemektedir. Ancak, kullanıcı dizinleri düzgün şekilde
      yapılandırılmışsa istenen etki <directive
      module="mod_alias">AliasMatch</directive> yönergesi ile sağlanabilir.
      Örneğin, <code>http://mesela.dom/sayfalar/birisi/dosya.html</code>
      URL’si ile <code>/home/birisi/public_html/dosya.html</code> dosyasını
      eşlemek için <code>AliasMatch</code> yönergesi şöyle
      kullanılabilirdi:</p>

    <example>AliasMatch ^/sayfalar/([a-zA-Z0-9]+)/?(.*)
          /home/$1/public_html/$2</example>
</section>

<section id="redirect"><title>URL Yönlendirme</title>

    <p>Yukarıdaki bölümlerde açıklanan yapılandırma yönergeleri Apache’ye
      içeriği dosya sisteminin belli bir yerinden alıp istemciye göndermesini
      söyler. Bazen istemciye, istediği içeriğe farklı bir URL ile
      erişebileceğini ve bu URL için ayrı bir istek yapması gerektiğini
      bildirmek gerekir. Bu işleme <em>yönlendirme</em> adı verilir ve bu
      işlevsellik <directive module="mod_alias">Redirect</directive> yönergesi
      ile sağlanır. Örneğin, <directive module="core">DocumentRoot</directive>
      altındaki <code>/foo/</code> dizininin içeriğinin <code>/bar/</code>
      adında yeni bir dizine taşınması halinde istemciye yeni konumun
      bildirilmesi şöyle sağlanabilirdi:</p>

    <example>Redirect permanent /foo/
      http://mesela.dom/bar/</example>

    <p>Bu atama sayesinde <code>/foo/</code> ile başlayan URL yolları
      <code>mesela.dom</code> sunucundaki <code>/bar/</code> dizini altındaki
      içeriğe yönlendirilmektedir. Yönlendirmeyi aynı sunucu üzerinde yapmak
      zorunda değilsiniz, bu yönerge ile başka bir sunucuya da yönlendirme
      yapabilirsiniz.</p>

    <p>Apache ayrıca, yeniden yazma ile ilgili daha karmaşık sorunlara çözüm
      olarak <directive module="mod_alias">RedirectMatch</directive> diye bir
      yönerge daha sağlar. Örneğin bir sitenin baş sayfasını diğer isteklerden
      ayrı olarak farklı bir siteye yönlendirmek için yönergeyi şöyle
      kullanabilirsiniz:</p>

    <example>RedirectMatch permanent ^/$
      http://misal.dom/ilksayfa.html</example>

    <p>Bundan başka, bir sitedeki tüm sayfalara yapılan istekleri başka bir
      siteye geçici olarak yönlendirmek için şöyle bir şey yapabilirsiniz:</p>

    <example>RedirectMatch temp .*
      http://mesela.misal.dom/ilksayfa.html</example>
</section>

<section id="proxy"><title>Karşı Vekil</title>

    <p>Apache ayrıca, uzak sunuculardaki belgelerin yerel sunucunun URL
      alanına getirilmesini de mümkün kılar. Bu tekniğe HTTP sunucunun
      belgeleri uzak bir sunucudan alıp istemciye sunmasını sağlayarak bir
      vekil sunucu gibi davranması nedeniyle <em>ters vekalet</em> adı
      verilir. Belgelerin istemciye özkaynağın bulunduğu sunucudan
      geliyormuş gibi değilde doğrudan isteği yaptığı sunucudan geliyormuş
      gibi sunulması nedeniyle bu işlem normal vekaletten farklıdır.</p>

    <p>Aşağıdaki örnekte, istemci <code>/foo/</code> dizini altından bir belge
      istemekte, sunucu ise bu belgeyi <code>dahili.mesela.dom</code>
      üzerindeki <code>/bar/</code> dizininden alıp istemciye yerel sunucudan
      geliyormuş gibi sunmaktadır:</p>

    <example>
      ProxyPass /foo/ http://dahili.mesela.dom/bar/<br />
      ProxyPassReverse /foo/ http://dahili.mesela.dom/bar/<br />
      ProxyPassReverseCookieDomain dahili.mesela.dom harici.mesela.dom<br />
      ProxyPassReverseCookiePath /foo/ /bar/
    </example>

    <p><directive module="mod_proxy">ProxyPass</directive> sunucuyu uygun
      belgeleri alması için yapılandırırken <directive module="mod_proxy"
      >ProxyPassReverse</directive> yönergesi <code>dahili.mesela.dom</code>
      sunucusundan kaynaklanan yönlendirmeleri yeniden yazar, böylece bunların
      yerel sunucudaki yerleri belirlenmiş olur. Benzer şekilde,  <directive
      module="mod_proxy">ProxyPassReverseCookieDomain</directive> ve
      <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
      yönergeleri de arka sunucu tarafından atanan çerezleri yeniden yazar.</p>

    <p>Yalnız, belgelerin içindeki hiperbağların yeniden yazılmayacağına
      dikkat ediniz. Dolayısıyla, belge içinde
      <code>dahili.mesela.dom</code>’u ismiyle hedef alan mutlak hiperbağlar
      varsa bunlar istemci tarafından vekil sunucudan değil doğrudan
      <code>dahili.mesela.dom</code>’dan istenecektir. Üçüncü parti modüller
      arasında HTML ve XHTML’de hiperbağları yeniden yazabilen <a
      href="http://apache.webthing.com/mod_proxy_html/" >mod_proxy_html</a>
      adında bir modül vardır.</p>
</section>

<section id="rewrite"><title>Yeniden Yazma Motoru</title>

    <p>Daha güçlü ikameler gerektiğinde <module>mod_rewrite</module> modülü
      tarafından sağlanan yeniden yazma motoru işe yarayabilir. Bu modüldeki
      yönergeler sunulacak içeriğin yerine karar vermek için kaynak IP adresi,
      tarayıcı türü gibi isteğe özgü özellikleri kullanırlar.
      <module>mod_rewrite</module> modülü buna ek olarak isteğin nasıl ele
      alınacağına karar vermek için harici yazılımları ve veritabanlarını
      kullanabilir. Yeniden yazma motoru yukarıda değinilen üç eşleşme türünü
      de uygulayabilecek yetenektedir: Dahili yönlendirmeler (rumuzlar),
      harici yönlendirmeler ve vekalet. <module>mod_rewrite</module> modülü
      tarafından sağlanan yeteneklerin ayrıntılı açıklamaları ve bunların
      kullanım örnekleri ayrıntılı olarak <a href="rewrite/">mod_rewrite
      belgeleri</a>nde bulunmaktadır.</p>
</section>

<section id="notfound"><title>Dosya orada yok</title>

    <p>Kaçınılmaz olarak, dosya sisteminde mevcut olmayan dosyalar için de
      istek yapılacaktır. Bunun çeşitli sebepleri olabilir.  Bazı durumlarda
      bu, belgelerin yerlerininin değiştirilmesinin bir sonucu olabilir. Bu
      durumda yapılacak en iyi şey, istemciyi belgeyi yeni yerinden istemesi
      için bilgilendirmek amacıyla  <a href="#redirect">URL yönlendirmesi</a>
      kullanmaktır. Bu şekilde, içeriğin yeri değişse bile eski yer imlerinin
      ve hiperbağların çalışmaya devam edeceklerinden emin olabilirsiniz.</p>

    <p>"Dosya orada yok" ("File Not Found") hatalarının diğer bir bildik
      sebebi de URL’lerin hiperbağlarda veya doğrudan tarayıcıda kasıtlı ya da
      kasıtsız, yanlış yazılmasıdır. Bu tür sorunlarda yardımcı olması için
      Apache <module>mod_speling</module> (sic) adında bir modülle gelir. Bu
      modül etkin kılındığında Apache, "Dosya orada yok" ("File Not Found")
      hatalarının önünü kesip başka bir yerde benzer isimde bir dosya var mı
      diye bakar. Böyle bir dosya varsa, <module>mod_speling</module>
      istemciye dosyanın doğru yerini bildiren bir HTTP yönlendirmesi yollar.
      Benzer çok sayıda dosya varsa bunlar istemciye bir liste halinde
      sunulur.</p>

    <p><module>mod_speling</module> modülünün en yararlı özelliklerinden biri
      de dosya isimlerini harf büyüklüğüne duyarsız olarak arayabilmesidir.
      Dosya isimlerinde harf büyüklüğünün önemli olduğu Unix benzeri sistemler
      hakkında bilgisi olmayan kullanıcılara sahip sistemlerin kullanıcılarına
      bu büyük yarar sağlar. Fakat modülün URL düzeltmekten başka şeyler için
      de kullanılması, istemcilerden gelen neredeyse her isteğin URL
      yönlendirmesine konu olmasına sebep olarak sunucunun yükünü
      arttırabilir.</p>

    <p>Yerinde bulunmayan içeriğin bulunması çabalarının tümü Apache’nin 404
      (Dosya orada yok) HTTP durum kodlu bir hata sayfası döndürmesine yol
      açar. Bu sayfanın içeriği <directive module="core"
      >ErrorDocument</directive> yönergesi ile denetlenebilir ve <a
      href="custom-error.html" >Hata Yanıtlarının Kişiselleştirilmesi</a>
      bölümünde anlatıldığı gibi oldukça esnek bir şekilde
      kişiselleştirilebilir.</p>
</section>

</manualpage>
