| <?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: 1310494:1935166 (outdated) --> | |
| <!-- ===================================================== | |
| 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 HTTP Sunucusu 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_actions</module> | |
| <module>mod_alias</module> | |
| <module>mod_dir</module> | |
| <module>mod_imagemap</module> | |
| <module>mod_negotiation</module> | |
| <module>mod_proxy</module> | |
| <module>mod_rewrite</module> | |
| <module>mod_speling</module> | |
| <module>mod_userdir</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 | |
| httpd'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>httpd 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. httpd'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 httpd 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/$3</example> | |
| </section> | |
| <section id="redirect"><title>URL Yönlendirme</title> | |
| <p>Yukarıdaki bölümlerde açıklanan yapılandırma yönergeleri httpd'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>httpd 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>httpd 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. Bir sayfanın içindeki bu | |
| bağları (ve diğer içeriği) <module>mod_substitute</module> modülü | |
| kullanılarak istemciye sunuluyormuşçasına değiştirebilirsiniz.</p> | |
| <example> | |
| Substitute s/dahili\.mesela\.dom/harici.mesela.dom/i | |
| </example> | |
| <p>HTML ve XHTML'de hiperbağları daha bilgece yeniden yazabilen | |
| <module>mod_proxy_html</module> modülü de kullanılabilir. Yeniden | |
| yazılması gereken URL eşlemlerini oluşturmanızı sağlar, böylece karmaşık | |
| vekil senaryoları oluşturulabilir.</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 | |
| httpd <module>mod_speling</module> (sic) adında bir modülle gelir. Bu | |
| modül etkin kılındığında htpd, "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><module>mod_dir</module> modülü sanal URI'leri, onları sunan gerçek | |
| kaynağa eşlemekte kullanılan <directive module="mod_dir" | |
| >FallbackResource</directive> yönergesini içerir. Bir 'ön denetleyici' | |
| gerçeklerken <module>mod_rewrite</module> modülünün kullanılmasını | |
| sağlamak için çok kullanışlıdır.</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> | |
| <section id="other"><title>Diğer URL Eşleme Modülleri</title> | |
| <!-- TODO Flesh out each of the items in the list below. --> | |
| <p>URL eşlemede kullanılabilecek diğer modüller:</p> | |
| <ul> | |
| <li><module>mod_actions</module> - Bir isteği, özkaynağın MIME türüne veya | |
| istek yöntemine bakarak bir CGI betiğine eşler.</li> | |
| <li><module>mod_dir</module> - URL'yi sonlandıran bölü çizgisini | |
| <code>index.html</code> bir dosyaya eşler.</li> | |
| <li><module>mod_imagemap</module> - Bir isteği, bir HTML belge içindeki | |
| bir resme yapılan kullanıcı tıklamalarına dayanarak bir URL'ye | |
| eşler.</li> | |
| <li><module>mod_negotiation</module> - Dil veya içerik sıkıştırması gibi | |
| kullanıcı tercihlerine dayanarak uygun bir belgeyi seçer.</li> | |
| </ul> | |
| </section> | |
| </manualpage> |