mirror of
https://github.com/apache/httpd.git
synced 2025-07-29 12:10:29 +00:00

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1755407 13f79535-47bb-0310-9956-ffa450edef68
381 lines
19 KiB
XML
381 lines
19 KiB
XML
<?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: 1741864 -->
|
||
<!-- =====================================================
|
||
Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
|
||
Reviewed by: Orhan Berent <berent belgeler.gen.tr>
|
||
========================================================== -->
|
||
|
||
<!--
|
||
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_autoindex</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="mod_dir">DirectoryIndex</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://example.com/balıklar/zargana.html</code> şeklindeki bir
|
||
istek için istemciye <code>/var/http/html/balıklar/zargana.html</code>
|
||
dosyası sunulur.</p>
|
||
|
||
<p>Bir dizin istenirse (<code>/</code> ile biten bir yol belirtilmesi
|
||
durumu), sunulacak dosya <directive module="mod_dir"
|
||
>DirectoryIndex</directive> yönergesinde belirtilen dosya olacaktır.
|
||
Örneğin, <code>DocumentRoot</code> yukarıdaki gibi belirtimiş ve siz de
|
||
şunu belirtmişseniz:</p>
|
||
|
||
<example>DirectoryIndex index.html index.php</example>
|
||
|
||
<p><code>http://www.example.com/fish/</code> isteği, httpd'nin
|
||
<code>/var/www/html/fish/index.html</code> dosyasını sunmaya, bu dosya
|
||
bulunmuyorsa <code>/var/www/html/fish/index.php</code> dosyasını sunmaya
|
||
çalışmasına sebep olacaktır.</p>
|
||
|
||
<p>Bu dosyaların ikisi de bulunmuyorsa sonraki adım,
|
||
<module>mod_autoindex</module> yüklü ve uygun şekilde yapılandırılmışsa
|
||
bir dizin içeriği dosyası sağlamaya çalışmak olacaktır.</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>
|
||
|
||
<highlight language="config">Alias "/belgeler" "/var/http"</highlight>
|
||
|
||
<p>yapılandırması ile
|
||
<code>http://example.com/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>
|
||
|
||
<highlight language="config">
|
||
ScriptAliasMatch "^/~([a-zA-Z0-9]+)/cgi-bin/(.+)" "/home/$1/cgi-bin/$2"
|
||
</highlight>
|
||
|
||
<p>satırı sayesinde <code>http://example.com/~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://example.com/~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://example.com/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>
|
||
|
||
<highlight language="config">
|
||
AliasMatch "^/sayfalar/([a-zA-Z0-9]+)(/(.*))?$" "/home/$1/public_html/$3"
|
||
</highlight>
|
||
</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>
|
||
|
||
<highlight language="config">
|
||
Redirect permanent "/foo/" "http://example.com/bar/"
|
||
</highlight>
|
||
|
||
<p>Bu atama sayesinde <code>/foo/</code> ile başlayan URL yolları
|
||
<code>example.com</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>
|
||
|
||
<highlight language="config">
|
||
RedirectMatch permanent "^/$" "http://example.com/ilksayfa.html"
|
||
</highlight>
|
||
|
||
<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>
|
||
|
||
<highlight language="config">
|
||
RedirectMatch temp ".*" "http://mesela.example.com/ilksayfa.html"
|
||
</highlight>
|
||
</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.example.com</code>
|
||
üzerindeki <code>/bar/</code> dizininden alıp istemciye yerel sunucudan
|
||
geliyormuş gibi sunmaktadır:</p>
|
||
|
||
<highlight language="config">
|
||
ProxyPass "/foo/" "http://dahili.example.com/bar/"
|
||
ProxyPassReverse "/foo/" "http://dahili.example.com/bar/"
|
||
ProxyPassReverseCookieDomain dahili.example.com harici.example.com
|
||
ProxyPassReverseCookiePath "/foo/" "/bar/"
|
||
</highlight>
|
||
|
||
<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.example.com</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.example.com</code>’u ismiyle hedef alan mutlak hiperbağlar
|
||
varsa bunlar istemci tarafından vekil sunucudan değil doğrudan
|
||
<code>dahili.example.com</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>
|
||
|
||
<highlight language="config">
|
||
Substitute "s/dahili\.example\.com/harici.example.com/i"
|
||
</highlight>
|
||
|
||
<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>
|