| <?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:1741874 (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> |