1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 567425:732819 (outdated) -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7 Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
11 Licensed to the Apache Software Foundation (ASF) under one or more
12 contributor license agreements. See the NOTICE file distributed with
13 this work for additional information regarding copyright ownership.
14 The ASF licenses this file to You under the Apache License, Version 2.0
15 (the "License"); you may not use this file except in compliance with
16 the License. You may obtain a copy of the License at
18 http://www.apache.org/licenses/LICENSE-2.0
20 Unless required by applicable law or agreed to in writing, software
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
27 <manualpage metafile="urlmapping.xml.meta">
29 <title>URL’lerin Dosya Sistemi ile Eşleştirilmesi</title>
32 <p>Bu belgede, bir istekte belirtilen URL’nin sunulacak dosyanın dosya
33 sistemindeki yerini bulmak için Apache tarafından nasıl kullanıldığı
37 <section id="related"><title>İlgili Modüller ve Yönergeler</title>
41 <module>mod_alias</module>
42 <module>mod_proxy</module>
43 <module>mod_rewrite</module>
44 <module>mod_userdir</module>
45 <module>mod_speling</module>
46 <module>mod_vhost_alias</module>
49 <directive module="mod_alias">Alias</directive>
50 <directive module="mod_alias">AliasMatch</directive>
51 <directive module="mod_speling">CheckSpelling</directive>
52 <directive module="core">DocumentRoot</directive>
53 <directive module="core">ErrorDocument</directive>
54 <directive module="core">Options</directive>
55 <directive module="mod_proxy">ProxyPass</directive>
56 <directive module="mod_proxy">ProxyPassReverse</directive>
57 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
58 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
59 <directive module="mod_alias">Redirect</directive>
60 <directive module="mod_alias">RedirectMatch</directive>
61 <directive module="mod_rewrite">RewriteCond</directive>
62 <directive module="mod_rewrite">RewriteMatch</directive>
63 <directive module="mod_alias">ScriptAlias</directive>
64 <directive module="mod_alias">ScriptAliasMatch</directive>
65 <directive module="mod_userdir">UserDir</directive>
70 <section id="documentroot"><title><code>DocumentRoot</code></title>
72 <p>Yapılan bir isteğe hangi dosyanın sunulacağına karar verirken
73 Apache’nin öntanımlı davranışı istek için URL yolunu (URL’den konak ismi
74 ve port ayrıldıktan sonra kalan kısım) alıp bunu yapılandırma dosyasında
75 <directive module="core">DocumentRoot</directive> yönergesi ile
76 belirtilen dizinin sonuna eklemektir. Bu nedenle, <directive
77 module="core">DocumentRoot</directive> altındaki dizinler ve dosyalar
78 sitenin dışardan görünen temel belge ağacını oluştururlar.</p>
80 <p>Örneğin, <directive module="core">DocumentRoot</directive> yönergesine
81 <code>/var/http/html</code> atanmış olsun.
82 <code>http://mesela.dom/balıklar/zargana.html</code> şeklindeki bir
83 istek için istemciye <code>/var/http/html/balıklar/zargana.html</code>
86 <p>Apache ayrıca, sunucunun birden fazla konak için istek kabul etmesini
87 sağlayan <a href="vhosts/">sanal barındırmaya</a> da muktedirdir. Bu
88 durumda her sanal konak için ayrı bir <directive module="core"
89 >DocumentRoot</directive> belirtilebileceği gibi sunulacak içeriğin
90 istekte bulunulan IP adresi veya konak ismine dayanarak devingen olarak
91 saptanmasını sağlayabilen <module>mod_vhost_alias</module> modülüyle
92 gelen yönergeler de kullanılabilir.</p>
94 <p><directive module="core">DocumentRoot</directive> yönergesi
95 yapılandırma dosyanızda ana sunucu için bir tane ve muhtemelen
96 oluşturduğunuz her <a href="vhosts/">sanal konak</a> için de birer
100 <section id="outside"><title>Belge Kök Dizini Dışındaki Dosyalar</title>
102 <p>Bazen dosya sisteminde doğrudan <directive module="core"
103 >DocumentRoot</directive> altında bulunmayan dosyalara da erişim izni
104 vermek gerekir. Apache’de bunu sağlamanın çeşitli yolları vardır. Unix
105 sistemlerinde sembolik bağlar sayesinde dosya sisteminin farklı
106 yerlerindeki dosyaları ve dizinleri <directive module="core"
107 >DocumentRoot</directive> altındaymış gibi göstermek mümkündür.
108 <directive module="core">Options</directive> yönergesine değer olarak
109 <code>FollowSymLinks</code> veya <code>SymLinksIfOwnerMatch</code>
110 atanmadıkça Apache olası güvenlik açıklarına karşı öntanımlı olarak
111 sembolik bağları izlemez.</p>
113 <p>Bundan başka, dosya sisteminin farklı parçalarını belge kök dizini
114 altında göstermek için <directive module="mod_alias">Alias</directive>
115 yönergesi de kullanılabilir. Örneğin,</p>
117 <example>Alias /belgeler /var/http</example>
119 <p>yapılandırması ile
120 <code>http://mesela.dom/belgeler/dizin/dosya.html</code> URL’si için
121 dosya sistemindeki <code>/var/http/dizin/dosya.html</code> dosyası
122 sunulacaktır. Hedef dizindeki dosyaları birer <glossary ref="cgi"
123 >CGI</glossary> betiği olarak imlemesi dışında <directive
124 module="mod_alias" >ScriptAlias</directive> yönergesi de aynı şekilde
127 <p>Biraz daha fazla esnekliğin gerektiği durumlarda <glossary
128 ref="regex">düzenli ifadelere</glossary> dayalı eşleşmeler sağlamak
129 üzere <directive module="mod_alias">AliasMatch</directive> ve <directive
130 module="mod_alias" >ScriptAliasMatch</directive> yönergelerinin gücünden
131 yararlanılabilir. Örneğin,</p>
133 <example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
134 /home/$1/cgi-bin/$2</example>
136 <p>satırı sayesinde <code>http://mesela.dom/~user/cgi-bin/betik.cgi</code>
137 URL’si <code>/home/user/cgi-bin/betik.cgi</code> dosyası ile
138 eşleştirilir ve dosya bir CGI betiği olarak çalıştırılırdı.</p>
141 <section id="user"><title>Kullanıcı Dizinleri</title>
143 <p>Geleneksel olarak Unix sistemlerinde belli bir kullanıcının (örn,
144 <em>birisi</em>) ev dizinine <code>~birisi/</code> şeklinde atıfta
145 bulunulabilir. <module>mod_userdir</module> modülü bu özelliği site
146 üzerinden kullanıcıların ev dizinlerindeki dosyaları kişisel sayfalar
147 olarak sunmalarını sağlamak üzere kullanır. Örnek:</p>
149 <example>http://mesela.dom/~birisi/dosya.html</example>
151 <p>Güvenlik sebebiyle kullanıcıların ev dizinlerine doğrudan HTTP erişimi
152 vermek uygun olmaz. Bu bakımdan, kullanıcının ev dizini altında HTTP
153 erişimi verilecek dosyaların bulunduğu dizini belirtmek için <directive
154 module="mod_userdir">UserDir</directive> yönergesi sağlanmıştır.
155 Öntanımlı olan <code>Userdir public_html</code> yapılandırması ile
156 yukarıdaki gibi bir URL kullanıcının ev dizini (<code>/etc/passwd</code>
157 dosyasında belirtilir) <code>/home/birisi/</code> altında yer alan
158 <code>/home/birisi/public_html/dosya.html</code> dosyası ile
161 <p>Ev dizininin yerinin <code>/etc/passwd</code> dosyasında belirtilmediği
162 sistemlerde kullanılmak üzere <code>Userdir</code> yönergesinin başka
163 kullanım şekilleri de vardır.</p>
165 <p>Bazı kişiler (genellikle URL üzerinde <code>%7e</code> olarak
166 kodlanması sebebiyle) "~" simgesini biçimsiz bulabilir ve kullanıcı
167 dizinlerini imlemek için başka bir karakter kullanmayı tercih
168 edebilirler. Bu işlevsellik <module>mod_userdir</module> tarafından
169 desteklenmemektedir. Ancak, kullanıcı dizinleri düzgün şekilde
170 yapılandırılmışsa istenen etki <directive
171 module="mod_alias">AliasMatch</directive> yönergesi ile sağlanabilir.
172 Örneğin, <code>http://mesela.dom/sayfalar/birisi/dosya.html</code>
173 URL’si ile <code>/home/birisi/public_html/dosya.html</code> dosyasını
174 eşlemek için <code>AliasMatch</code> yönergesi şöyle
175 kullanılabilirdi:</p>
177 <example>AliasMatch ^/sayfalar/([a-zA-Z0-9]+)/?(.*)
178 /home/$1/public_html/$2</example>
181 <section id="redirect"><title>URL Yönlendirme</title>
183 <p>Yukarıdaki bölümlerde açıklanan yapılandırma yönergeleri Apache’ye
184 içeriği dosya sisteminin belli bir yerinden alıp istemciye göndermesini
185 söyler. Bazen istemciye, istediği içeriğe farklı bir URL ile
186 erişebileceğini ve bu URL için ayrı bir istek yapması gerektiğini
187 bildirmek gerekir. Bu işleme <em>yönlendirme</em> adı verilir ve bu
188 işlevsellik <directive module="mod_alias">Redirect</directive> yönergesi
189 ile sağlanır. Örneğin, <directive module="core">DocumentRoot</directive>
190 altındaki <code>/foo/</code> dizininin içeriğinin <code>/bar/</code>
191 adında yeni bir dizine taşınması halinde istemciye yeni konumun
192 bildirilmesi şöyle sağlanabilirdi:</p>
194 <example>Redirect permanent /foo/
195 http://mesela.dom/bar/</example>
197 <p>Bu atama sayesinde <code>/foo/</code> ile başlayan URL yolları
198 <code>mesela.dom</code> sunucundaki <code>/bar/</code> dizini altındaki
199 içeriğe yönlendirilmektedir. Yönlendirmeyi aynı sunucu üzerinde yapmak
200 zorunda değilsiniz, bu yönerge ile başka bir sunucuya da yönlendirme
203 <p>Apache ayrıca, yeniden yazma ile ilgili daha karmaşık sorunlara çözüm
204 olarak <directive module="mod_alias">RedirectMatch</directive> diye bir
205 yönerge daha sağlar. Örneğin bir sitenin baş sayfasını diğer isteklerden
206 ayrı olarak farklı bir siteye yönlendirmek için yönergeyi şöyle
207 kullanabilirsiniz:</p>
209 <example>RedirectMatch permanent ^/$
210 http://misal.dom/ilksayfa.html</example>
212 <p>Bundan başka, bir sitedeki tüm sayfalara yapılan istekleri başka bir
213 siteye geçici olarak yönlendirmek için şöyle bir şey yapabilirsiniz:</p>
215 <example>RedirectMatch temp .*
216 http://mesela.misal.dom/ilksayfa.html</example>
219 <section id="proxy"><title>Karşı Vekil</title>
221 <p>Apache ayrıca, uzak sunuculardaki belgelerin yerel sunucunun URL
222 alanına getirilmesini de mümkün kılar. Bu tekniğe HTTP sunucunun
223 belgeleri uzak bir sunucudan alıp istemciye sunmasını sağlayarak bir
224 vekil sunucu gibi davranması nedeniyle <em>ters vekalet</em> adı
225 verilir. Belgelerin istemciye özkaynağın bulunduğu sunucudan
226 geliyormuş gibi değilde doğrudan isteği yaptığı sunucudan geliyormuş
227 gibi sunulması nedeniyle bu işlem normal vekaletten farklıdır.</p>
229 <p>Aşağıdaki örnekte, istemci <code>/foo/</code> dizini altından bir belge
230 istemekte, sunucu ise bu belgeyi <code>dahili.mesela.dom</code>
231 üzerindeki <code>/bar/</code> dizininden alıp istemciye yerel sunucudan
232 geliyormuş gibi sunmaktadır:</p>
235 ProxyPass /foo/ http://dahili.mesela.dom/bar/<br />
236 ProxyPassReverse /foo/ http://dahili.mesela.dom/bar/<br />
237 ProxyPassReverseCookieDomain dahili.mesela.dom harici.mesela.dom<br />
238 ProxyPassReverseCookiePath /foo/ /bar/
241 <p><directive module="mod_proxy">ProxyPass</directive> sunucuyu uygun
242 belgeleri alması için yapılandırırken <directive module="mod_proxy"
243 >ProxyPassReverse</directive> yönergesi <code>dahili.mesela.dom</code>
244 sunucusundan kaynaklanan yönlendirmeleri yeniden yazar, böylece bunların
245 yerel sunucudaki yerleri belirlenmiş olur. Benzer şekilde, <directive
246 module="mod_proxy">ProxyPassReverseCookieDomain</directive> ve
247 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
248 yönergeleri de arka sunucu tarafından atanan çerezleri yeniden yazar.</p>
250 <p>Yalnız, belgelerin içindeki hiperbağların yeniden yazılmayacağına
251 dikkat ediniz. Dolayısıyla, belge içinde
252 <code>dahili.mesela.dom</code>’u ismiyle hedef alan mutlak hiperbağlar
253 varsa bunlar istemci tarafından vekil sunucudan değil doğrudan
254 <code>dahili.mesela.dom</code>’dan istenecektir. Üçüncü parti modüller
255 arasında HTML ve XHTML’de hiperbağları yeniden yazabilen <a
256 href="http://apache.webthing.com/mod_proxy_html/" >mod_proxy_html</a>
257 adında bir modül vardır.</p>
260 <section id="rewrite"><title>Yeniden Yazma Motoru</title>
262 <p>Daha güçlü ikameler gerektiğinde <module>mod_rewrite</module> modülü
263 tarafından sağlanan yeniden yazma motoru işe yarayabilir. Bu modüldeki
264 yönergeler sunulacak içeriğin yerine karar vermek için kaynak IP adresi,
265 tarayıcı türü gibi isteğe özgü özellikleri kullanırlar.
266 <module>mod_rewrite</module> modülü buna ek olarak isteğin nasıl ele
267 alınacağına karar vermek için harici yazılımları ve veritabanlarını
268 kullanabilir. Yeniden yazma motoru yukarıda değinilen üç eşleşme türünü
269 de uygulayabilecek yetenektedir: Dahili yönlendirmeler (rumuzlar),
270 harici yönlendirmeler ve vekalet. <module>mod_rewrite</module> modülü
271 tarafından sağlanan yeteneklerin ayrıntılı açıklamaları ve bunların
272 kullanım örnekleri <a href="misc/rewriteguide.html">URL Yeniden Yazma
273 Rehberi</a>nde bulunmaktadır.</p>
276 <section id="notfound"><title>Dosya orada yok</title>
278 <p>Kaçınılmaz olarak, dosya sisteminde mevcut olmayan dosyalar için de
279 istek yapılacaktır. Bunun çeşitli sebepleri olabilir. Bazı durumlarda
280 bu, belgelerin yerlerininin değiştirilmesinin bir sonucu olabilir. Bu
281 durumda yapılacak en iyi şey, istemciyi belgeyi yeni yerinden istemesi
282 için bilgilendirmek amacıyla <a href="#redirect">URL yönlendirmesi</a>
283 kullanmaktır. Bu şekilde, içeriğin yeri değişse bile eski yer imlerinin
284 ve hiperbağların çalışmaya devam edeceklerinden emin olabilirsiniz.</p>
286 <p>"Dosya orada yok" ("File Not Found") hatalarının diğer bir bildik
287 sebebi de URL’lerin hiperbağlarda veya doğrudan tarayıcıda kasıtlı ya da
288 kasıtsız, yanlış yazılmasıdır. Bu tür sorunlarda yardımcı olması için
289 Apache <module>mod_speling</module> (sic) adında bir modülle gelir. Bu
290 modül etkin kılındığında Apache, "Dosya orada yok" ("File Not Found")
291 hatalarının önünü kesip başka bir yerde benzer isimde bir dosya var mı
292 diye bakar. Böyle bir dosya varsa, <module>mod_speling</module>
293 istemciye dosyanın doğru yerini bildiren bir HTTP yönlendirmesi yollar.
294 Benzer çok sayıda dosya varsa bunlar istemciye bir liste halinde
297 <p><module>mod_speling</module> modülünün en yararlı özelliklerinden biri
298 de dosya isimlerini harf büyüklüğüne duyarsız olarak arayabilmesidir.
299 Dosya isimlerinde harf büyüklüğünün önemli olduğu Unix benzeri sistemler
300 hakkında bilgisi olmayan kullanıcılara sahip sistemlerin kullanıcılarına
301 bu büyük yarar sağlar. Fakat modülün URL düzeltmekten başka şeyler için
302 de kullanılması, istemcilerden gelen neredeyse her isteğin URL
303 yönlendirmesine konu olmasına sebep olarak sunucunun yükünü
306 <p>Yerinde bulunmayan içeriğin bulunması çabalarının tümü Apache’nin 404
307 (Dosya orada yok) HTTP durum kodlu bir hata sayfası döndürmesine yol
308 açar. Bu sayfanın içeriği <directive module="core"
309 >ErrorDocument</directive> yönergesi ile denetlenebilir ve <a
310 href="custom-error.html" >Hata Yanıtlarının Kişiselleştirilmesi</a>
311 bölümünde anlatıldığı gibi oldukça esnek bir şekilde
312 kişiselleştirilebilir.</p>