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: 1310494:1755981 (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 HTTP Sunucusu tarafından nasıl
34 kullanıldığı açıklanmaktadır.</p>
37 <section id="related"><title>İlgili Modüller ve Yönergeler</title>
41 <module>mod_actions</module>
42 <module>mod_alias</module>
43 <module>mod_dir</module>
44 <module>mod_imagemap</module>
45 <module>mod_negotiation</module>
46 <module>mod_proxy</module>
47 <module>mod_rewrite</module>
48 <module>mod_speling</module>
49 <module>mod_userdir</module>
50 <module>mod_vhost_alias</module>
53 <directive module="mod_alias">Alias</directive>
54 <directive module="mod_alias">AliasMatch</directive>
55 <directive module="mod_speling">CheckSpelling</directive>
56 <directive module="core">DocumentRoot</directive>
57 <directive module="core">ErrorDocument</directive>
58 <directive module="core">Options</directive>
59 <directive module="mod_proxy">ProxyPass</directive>
60 <directive module="mod_proxy">ProxyPassReverse</directive>
61 <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
62 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
63 <directive module="mod_alias">Redirect</directive>
64 <directive module="mod_alias">RedirectMatch</directive>
65 <directive module="mod_rewrite">RewriteCond</directive>
66 <directive module="mod_rewrite">RewriteRule</directive>
67 <directive module="mod_alias">ScriptAlias</directive>
68 <directive module="mod_alias">ScriptAliasMatch</directive>
69 <directive module="mod_userdir">UserDir</directive>
74 <section id="documentroot"><title><code>DocumentRoot</code></title>
76 <p>Yapılan bir isteğe hangi dosyanın sunulacağına karar verirken
77 httpd’nin öntanımlı davranışı istek için URL yolunu (URL’den konak ismi
78 ve port ayrıldıktan sonra kalan kısım) alıp bunu yapılandırma dosyasında
79 <directive module="core">DocumentRoot</directive> yönergesi ile
80 belirtilen dizinin sonuna eklemektir. Bu nedenle, <directive
81 module="core">DocumentRoot</directive> altındaki dizinler ve dosyalar
82 sitenin dışardan görünen temel belge ağacını oluştururlar.</p>
84 <p>Örneğin, <directive module="core">DocumentRoot</directive> yönergesine
85 <code>/var/http/html</code> atanmış olsun.
86 <code>http://mesela.dom/balıklar/zargana.html</code> şeklindeki bir
87 istek için istemciye <code>/var/http/html/balıklar/zargana.html</code>
90 <p>httpd ayrıca, sunucunun birden fazla konak için istek kabul etmesini
91 sağlayan <a href="vhosts/">sanal barındırmaya</a> da muktedirdir. Bu
92 durumda her sanal konak için ayrı bir <directive module="core"
93 >DocumentRoot</directive> belirtilebileceği gibi sunulacak içeriğin
94 istekte bulunulan IP adresi veya konak ismine dayanarak devingen olarak
95 saptanmasını sağlayabilen <module>mod_vhost_alias</module> modülüyle
96 gelen yönergeler de kullanılabilir.</p>
98 <p><directive module="core">DocumentRoot</directive> yönergesi
99 yapılandırma dosyanızda ana sunucu için bir tane ve muhtemelen
100 oluşturduğunuz her <a href="vhosts/">sanal konak</a> için de birer
104 <section id="outside"><title>Belge Kök Dizini Dışındaki Dosyalar</title>
106 <p>Bazen dosya sisteminde doğrudan <directive module="core"
107 >DocumentRoot</directive> altında bulunmayan dosyalara da erişim izni
108 vermek gerekir. httpd’de bunu sağlamanın çeşitli yolları vardır. Unix
109 sistemlerinde sembolik bağlar sayesinde dosya sisteminin farklı
110 yerlerindeki dosyaları ve dizinleri <directive module="core"
111 >DocumentRoot</directive> altındaymış gibi göstermek mümkündür.
112 <directive module="core">Options</directive> yönergesine değer olarak
113 <code>FollowSymLinks</code> veya <code>SymLinksIfOwnerMatch</code>
114 atanmadıkça httpd olası güvenlik açıklarına karşı öntanımlı olarak
115 sembolik bağları izlemez.</p>
117 <p>Bundan başka, dosya sisteminin farklı parçalarını belge kök dizini
118 altında göstermek için <directive module="mod_alias">Alias</directive>
119 yönergesi de kullanılabilir. Örneğin,</p>
121 <example>Alias /belgeler /var/http</example>
123 <p>yapılandırması ile
124 <code>http://mesela.dom/belgeler/dizin/dosya.html</code> URL’si için
125 dosya sistemindeki <code>/var/http/dizin/dosya.html</code> dosyası
126 sunulacaktır. Hedef dizindeki dosyaları birer <glossary ref="cgi"
127 >CGI</glossary> betiği olarak imlemesi dışında <directive
128 module="mod_alias" >ScriptAlias</directive> yönergesi de aynı şekilde
131 <p>Biraz daha fazla esnekliğin gerektiği durumlarda <glossary
132 ref="regex">düzenli ifadelere</glossary> dayalı eşleşmeler sağlamak
133 üzere <directive module="mod_alias">AliasMatch</directive> ve <directive
134 module="mod_alias" >ScriptAliasMatch</directive> yönergelerinin gücünden
135 yararlanılabilir. Örneğin,</p>
137 <example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
138 /home/$1/cgi-bin/$2</example>
140 <p>satırı sayesinde <code>http://mesela.dom/~user/cgi-bin/betik.cgi</code>
141 URL’si <code>/home/user/cgi-bin/betik.cgi</code> dosyası ile
142 eşleştirilir ve dosya bir CGI betiği olarak çalıştırılırdı.</p>
145 <section id="user"><title>Kullanıcı Dizinleri</title>
147 <p>Geleneksel olarak Unix sistemlerinde belli bir kullanıcının (örn,
148 <em>birisi</em>) ev dizinine <code>~birisi/</code> şeklinde atıfta
149 bulunulabilir. <module>mod_userdir</module> modülü bu özelliği site
150 üzerinden kullanıcıların ev dizinlerindeki dosyaları kişisel sayfalar
151 olarak sunmalarını sağlamak üzere kullanır. Örnek:</p>
153 <example>http://mesela.dom/~birisi/dosya.html</example>
155 <p>Güvenlik sebebiyle kullanıcıların ev dizinlerine doğrudan HTTP erişimi
156 vermek uygun olmaz. Bu bakımdan, kullanıcının ev dizini altında HTTP
157 erişimi verilecek dosyaların bulunduğu dizini belirtmek için <directive
158 module="mod_userdir">UserDir</directive> yönergesi sağlanmıştır.
159 Öntanımlı olan <code>Userdir public_html</code> yapılandırması ile
160 yukarıdaki gibi bir URL kullanıcının ev dizini (<code>/etc/passwd</code>
161 dosyasında belirtilir) <code>/home/birisi/</code> altında yer alan
162 <code>/home/birisi/public_html/dosya.html</code> dosyası ile
165 <p>Ev dizininin yerinin <code>/etc/passwd</code> dosyasında belirtilmediği
166 sistemlerde kullanılmak üzere <code>Userdir</code> yönergesinin başka
167 kullanım şekilleri de vardır.</p>
169 <p>Bazı kişiler (genellikle URL üzerinde <code>%7e</code> olarak
170 kodlanması sebebiyle) "~" simgesini biçimsiz bulabilir ve kullanıcı
171 dizinlerini imlemek için başka bir karakter kullanmayı tercih
172 edebilirler. Bu işlevsellik <module>mod_userdir</module> tarafından
173 desteklenmemektedir. Ancak, kullanıcı dizinleri düzgün şekilde
174 yapılandırılmışsa istenen etki <directive
175 module="mod_alias">AliasMatch</directive> yönergesi ile sağlanabilir.
176 Örneğin, <code>http://mesela.dom/sayfalar/birisi/dosya.html</code>
177 URL’si ile <code>/home/birisi/public_html/dosya.html</code> dosyasını
178 eşlemek için <code>AliasMatch</code> yönergesi şöyle
179 kullanılabilirdi:</p>
181 <example>AliasMatch ^/sayfalar/([a-zA-Z0-9]+)(/(.*))?$
182 /home/$1/public_html/$3</example>
185 <section id="redirect"><title>URL Yönlendirme</title>
187 <p>Yukarıdaki bölümlerde açıklanan yapılandırma yönergeleri httpd’ye
188 içeriği dosya sisteminin belli bir yerinden alıp istemciye göndermesini
189 söyler. Bazen istemciye, istediği içeriğe farklı bir URL ile
190 erişebileceğini ve bu URL için ayrı bir istek yapması gerektiğini
191 bildirmek gerekir. Bu işleme <em>yönlendirme</em> adı verilir ve bu
192 işlevsellik <directive module="mod_alias">Redirect</directive> yönergesi
193 ile sağlanır. Örneğin, <directive module="core">DocumentRoot</directive>
194 altındaki <code>/foo/</code> dizininin içeriğinin <code>/bar/</code>
195 adında yeni bir dizine taşınması halinde istemciye yeni konumun
196 bildirilmesi şöyle sağlanabilirdi:</p>
198 <example>Redirect permanent /foo/
199 http://mesela.dom/bar/</example>
201 <p>Bu atama sayesinde <code>/foo/</code> ile başlayan URL yolları
202 <code>mesela.dom</code> sunucundaki <code>/bar/</code> dizini altındaki
203 içeriğe yönlendirilmektedir. Yönlendirmeyi aynı sunucu üzerinde yapmak
204 zorunda değilsiniz, bu yönerge ile başka bir sunucuya da yönlendirme
207 <p>httpd ayrıca, yeniden yazma ile ilgili daha karmaşık sorunlara çözüm
208 olarak <directive module="mod_alias">RedirectMatch</directive> diye bir
209 yönerge daha sağlar. Örneğin bir sitenin baş sayfasını diğer isteklerden
210 ayrı olarak farklı bir siteye yönlendirmek için yönergeyi şöyle
211 kullanabilirsiniz:</p>
213 <example>RedirectMatch permanent ^/$
214 http://misal.dom/ilksayfa.html</example>
216 <p>Bundan başka, bir sitedeki tüm sayfalara yapılan istekleri başka bir
217 siteye geçici olarak yönlendirmek için şöyle bir şey yapabilirsiniz:</p>
219 <example>RedirectMatch temp .*
220 http://mesela.misal.dom/ilksayfa.html</example>
223 <section id="proxy"><title>Karşı Vekil</title>
225 <p>httpd ayrıca, uzak sunuculardaki belgelerin yerel sunucunun URL
226 alanına getirilmesini de mümkün kılar. Bu tekniğe HTTP sunucunun
227 belgeleri uzak bir sunucudan alıp istemciye sunmasını sağlayarak bir
228 vekil sunucu gibi davranması nedeniyle <em>ters vekalet</em> adı
229 verilir. Belgelerin istemciye özkaynağın bulunduğu sunucudan
230 geliyormuş gibi değilde doğrudan isteği yaptığı sunucudan geliyormuş
231 gibi sunulması nedeniyle bu işlem normal vekaletten farklıdır.</p>
233 <p>Aşağıdaki örnekte, istemci <code>/foo/</code> dizini altından bir belge
234 istemekte, sunucu ise bu belgeyi <code>dahili.mesela.dom</code>
235 üzerindeki <code>/bar/</code> dizininden alıp istemciye yerel sunucudan
236 geliyormuş gibi sunmaktadır:</p>
239 ProxyPass /foo/ http://dahili.mesela.dom/bar/<br />
240 ProxyPassReverse /foo/ http://dahili.mesela.dom/bar/<br />
241 ProxyPassReverseCookieDomain dahili.mesela.dom harici.mesela.dom<br />
242 ProxyPassReverseCookiePath /foo/ /bar/
245 <p><directive module="mod_proxy">ProxyPass</directive> sunucuyu uygun
246 belgeleri alması için yapılandırırken <directive module="mod_proxy"
247 >ProxyPassReverse</directive> yönergesi <code>dahili.mesela.dom</code>
248 sunucusundan kaynaklanan yönlendirmeleri yeniden yazar, böylece bunların
249 yerel sunucudaki yerleri belirlenmiş olur. Benzer şekilde, <directive
250 module="mod_proxy">ProxyPassReverseCookieDomain</directive> ve
251 <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
252 yönergeleri de arka sunucu tarafından atanan çerezleri yeniden yazar.</p>
254 <p>Yalnız, belgelerin içindeki hiperbağların yeniden yazılmayacağına
255 dikkat ediniz. Dolayısıyla, belge içinde
256 <code>dahili.mesela.dom</code>’u ismiyle hedef alan mutlak hiperbağlar
257 varsa bunlar istemci tarafından vekil sunucudan değil doğrudan
258 <code>dahili.mesela.dom</code>’dan istenecektir. Bir sayfanın içindeki bu
259 bağları (ve diğer içeriği) <module>mod_substitute</module> modülü
260 kullanılarak istemciye sunuluyormuşçasına değiştirebilirsiniz.</p>
263 Substitute s/dahili\.mesela\.dom/harici.mesela.dom/i
266 <p>HTML ve XHTML’de hiperbağları daha bilgece yeniden yazabilen
267 <module>mod_proxy_html</module> modülü de kullanılabilir. Yeniden
268 yazılması gereken URL eşlemlerini oluşturmanızı sağlar, böylece karmaşık
269 vekil senaryoları oluşturulabilir.</p>
272 <section id="rewrite"><title>Yeniden Yazma Motoru</title>
274 <p>Daha güçlü ikameler gerektiğinde <module>mod_rewrite</module> modülü
275 tarafından sağlanan yeniden yazma motoru işe yarayabilir. Bu modüldeki
276 yönergeler sunulacak içeriğin yerine karar vermek için kaynak IP adresi,
277 tarayıcı türü gibi isteğe özgü özellikleri kullanırlar.
278 <module>mod_rewrite</module> modülü buna ek olarak isteğin nasıl ele
279 alınacağına karar vermek için harici yazılımları ve veritabanlarını
280 kullanabilir. Yeniden yazma motoru yukarıda değinilen üç eşleşme türünü
281 de uygulayabilecek yetenektedir: Dahili yönlendirmeler (rumuzlar),
282 harici yönlendirmeler ve vekalet. <module>mod_rewrite</module> modülü
283 tarafından sağlanan yeteneklerin ayrıntılı açıklamaları ve bunların
284 kullanım örnekleri ayrıntılı olarak <a href="rewrite/">mod_rewrite
285 belgeleri</a>nde bulunmaktadır.</p>
288 <section id="notfound"><title>Dosya orada yok</title>
290 <p>Kaçınılmaz olarak, dosya sisteminde mevcut olmayan dosyalar için de
291 istek yapılacaktır. Bunun çeşitli sebepleri olabilir. Bazı durumlarda
292 bu, belgelerin yerlerininin değiştirilmesinin bir sonucu olabilir. Bu
293 durumda yapılacak en iyi şey, istemciyi belgeyi yeni yerinden istemesi
294 için bilgilendirmek amacıyla <a href="#redirect">URL yönlendirmesi</a>
295 kullanmaktır. Bu şekilde, içeriğin yeri değişse bile eski yer imlerinin
296 ve hiperbağların çalışmaya devam edeceklerinden emin olabilirsiniz.</p>
298 <p>"Dosya orada yok" ("File Not Found") hatalarının diğer bir bildik
299 sebebi de URL’lerin hiperbağlarda veya doğrudan tarayıcıda kasıtlı ya da
300 kasıtsız, yanlış yazılmasıdır. Bu tür sorunlarda yardımcı olması için
301 httpd <module>mod_speling</module> (sic) adında bir modülle gelir. Bu
302 modül etkin kılındığında htpd, "Dosya orada yok" ("File Not Found")
303 hatalarının önünü kesip başka bir yerde benzer isimde bir dosya var mı
304 diye bakar. Böyle bir dosya varsa, <module>mod_speling</module>
305 istemciye dosyanın doğru yerini bildiren bir HTTP yönlendirmesi yollar.
306 Benzer çok sayıda dosya varsa bunlar istemciye bir liste halinde
309 <p><module>mod_speling</module> modülünün en yararlı özelliklerinden biri
310 de dosya isimlerini harf büyüklüğüne duyarsız olarak arayabilmesidir.
311 Dosya isimlerinde harf büyüklüğünün önemli olduğu Unix benzeri sistemler
312 hakkında bilgisi olmayan kullanıcılara sahip sistemlerin kullanıcılarına
313 bu büyük yarar sağlar. Fakat modülün URL düzeltmekten başka şeyler için
314 de kullanılması, istemcilerden gelen neredeyse her isteğin URL
315 yönlendirmesine konu olmasına sebep olarak sunucunun yükünü
318 <p><module>mod_dir</module> modülü sanal URI'leri, onları sunan gerçek
319 kaynağa eşlemekte kullanılan <directive module="mod_dir"
320 >FallbackResource</directive> yönergesini içerir. Bir 'ön denetleyici'
321 gerçeklerken <module>mod_rewrite</module> modülünün kullanılmasını
322 sağlamak için çok kullanışlıdır.</p>
324 <p>Yerinde bulunmayan içeriğin bulunması çabalarının tümü Apache’nin 404
325 (Dosya orada yok) HTTP durum kodlu bir hata sayfası döndürmesine yol
326 açar. Bu sayfanın içeriği <directive module="core"
327 >ErrorDocument</directive> yönergesi ile denetlenebilir ve <a
328 href="custom-error.html" >Hata Yanıtlarının Kişiselleştirilmesi</a>
329 bölümünde anlatıldığı gibi oldukça esnek bir şekilde
330 kişiselleştirilebilir.</p>
333 <section id="other"><title>Diğer URL Eşleme Modülleri</title>
335 <!-- TODO Flesh out each of the items in the list below. -->
337 <p>URL eşlemede kullanılabilecek diğer modüller:</p>
340 <li><module>mod_actions</module> - Bir isteği, özkaynağın MIME türüne veya
341 istek yöntemine bakarak bir CGI betiğine eşler.</li>
343 <li><module>mod_dir</module> - URL'yi sonlandıran bölü çizgisini
344 <code>index.html</code> bir dosyaya eşler.</li>
346 <li><module>mod_imagemap</module> - Bir isteği, bir HTML belge içindeki
347 bir resme yapılan kullanıcı tıklamalarına dayanarak bir URL'ye
350 <li><module>mod_negotiation</module> - Dil veya içerik sıkıştırması gibi
351 kullanıcı tercihlerine dayanarak uygun bir belgeyi seçer.</li>