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