| <?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: 1933438:1935430 (outdated) --> | |
| <!-- | |
| 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="tech.xml.meta"> | |
| <parentdocument href="./">Rewrite</parentdocument> | |
| <title>Apache mod_rewrite Teknik Ayrıntıları</title> | |
| <summary> | |
| <p>Bu belge, <module>mod_rewrite</module> ve URL eşleştirmesinin bazı | |
| teknik ayrıntılarını tartışır.</p> | |
| </summary> | |
| <seealso><a href="../mod/mod_rewrite.html">Modül belgeleri</a></seealso> | |
| <seealso><a href="intro.html">mod_rewrite'a giriş</a></seealso> | |
| <seealso><a href="remapping.html">Yeniden yönlendirme ve yeniden eşleme</a></seealso> | |
| <seealso><a href="access.html">Erişim denetimi</a></seealso> | |
| <seealso><a href="vhosts.html">Sanal konaklar</a></seealso> | |
| <seealso><a href="proxy.html">Vekil kullanımı</a></seealso> | |
| <seealso><a href="rewritemap.html">RewriteMap Kullanımı</a></seealso> | |
| <seealso><a href="advanced.html">İleri teknikler</a></seealso> | |
| <seealso><a href="avoid.html">mod_rewrite kullanılmaması gereken durumlar</a></seealso> | |
| <section id="InternalAPI"><title>API Aşamaları</title> | |
| <p>Apache HTTP Sunucusu, istekleri birkaç aşamada işler. Bu | |
| aşamaların her birinde, istek yaşam döngüsünün o bölümünü | |
| işlemek üzere bir veya daha fazla modül çağrılabilir. Aşamalar | |
| URL-dosyaadı çevirisi, kimlik doğrulama, yetkilendirme, içerik | |
| ve günlükleme gibi şeyleri içerir. (Bu kapsamlı bir liste | |
| değildir.)</p> | |
| <p><module>mod_rewrite</module>, URL'lerin nasıl yeniden | |
| yazılabileceğini etkilemek için bu aşamalardan ikisinde (veya | |
| sıklıkla çağrıldıkları şekliyle "kancalarda") çalışır.</p> | |
| <p>İlk olarak, HTTP isteği okunduktan sonra ancak herhangi bir | |
| yetkilendirme başlamadan önce gerçekleşen URL-dosyaadı çevirisi | |
| kancasını kullanır. İkinci olarak, yetkilendirme aşamalarından | |
| sonra ve dizin başına yapılandırma dosyaları | |
| (<code>.htaccess</code> dosyaları) okunduktan sonra ancak içerik | |
| işleyicisi çağrılmadan önce gerçekleşen Düzeltme (Fixup) | |
| kancasını kullanır.</p> | |
| <p>Bir istek geldikten ve karşılık gelen sunucu veya sanal konak | |
| belirlendikten sonra, yeniden yazma motoru sunucu başına | |
| yapılandırmada görünen <module>mod_rewrite</module> yönergelerini | |
| işlemeye başlar. (Yani ana sunucu yapılandırma dosyası ve | |
| <directive module="core" type="section">Virtualhost</directive> | |
| bölümleri.) Bu, URL-dosyaadı aşamasında gerçekleşir.</p> | |
| <p>Birkaç adım sonra, son veri dizinleri bulunduktan sonra dizin | |
| başına yapılandırma yönergeleri (<code>.htaccess</code> dosyaları | |
| ve <directive module="core" type="section">Directory</directive> | |
| blokları) uygulanır. Bu, Düzeltme aşamasında gerçekleşir.</p> | |
| <p>Bu durumların her birinde <module>mod_rewrite</module>, | |
| <code>REQUEST_URI</code>'yi ya yeni bir URL'ye ya da bir dosya | |
| adına yeniden yazar.</p> | |
| <p>Dizin başına bağlamda (yani <code>.htaccess</code> dosyaları ve | |
| <code>Directory</code> blokları içinde) bu kurallar, bir URL | |
| zaten bir dosya adına çevrilmiş olduktan sonra uygulanır. Bu | |
| nedenle, <module>mod_rewrite</module> modülünün <directive | |
| module="mod_rewrite">RewriteRule</directive> yönergelerini | |
| başlangıçta karşılaştırdığı URL yolu, çevrilen dosya adının tam | |
| dosya sistemi yolu olup geçerli dizin yolu (sondaki eğik çizgi | |
| dahil) öndeki kısımdan çıkarılmıştır.</p> | |
| <p>Göstermek gerekirse: Kurallar /var/www/foo/.htaccess içindeyse | |
| ve /foo/bar/baz isteği işleniyorsa, ^bar/baz$ gibi bir ifade | |
| eşleşecektir.</p> | |
| <p>Dizin başına bağlamda bir değiştirme yapılırsa, yeni URL ile | |
| yeni bir dahili alt istek verilir ve bu da istek aşamalarının | |
| işlenmesini yeniden başlatır. Değiştirme göreli bir yolsa, | |
| <directive module="mod_rewrite">RewriteBase</directive> yönergesi | |
| değiştirmenin önüne eklenen URL yolu önekini belirler. Dizin | |
| başına bağlamda, döngüyü önlemek için sonunda (gelecekteki bir | |
| dizin başına yeniden yazma işleme "turunda") değiştirme yapmayan | |
| kurallar oluşturmaya dikkat edilmelidir. (Bu sorunun daha ayrıntılı | |
| tartışması için <a | |
| href="https://cwiki.apache.org/confluence/display/httpd/RewriteLooping">RewriteLooping</a> | |
| sayfasına bakın.)</p> | |
| <p>Dizin başına bağlamda URL'nin bu ek işlenmesi nedeniyle, bu | |
| bağlamda yeniden yazma kurallarınızı farklı şekilde oluşturmaya | |
| dikkat etmeniz gerekecektir. Özellikle, baştaki dizin yolunun | |
| yeniden yazma kurallarınızın göreceği URL'den çıkarılacağını | |
| unutmayın. Daha fazla açıklama için aşağıdaki örneklere bakın.</p> | |
| <table border="1"> | |
| <tr> | |
| <th>Kuralın konumu</th> | |
| <th>Kural</th> | |
| </tr> | |
| <tr> | |
| <td>VirtualHost bölümü</td> | |
| <td>RewriteRule "^/images/(.+)\.jpg" "/images/$1.gif"</td> | |
| </tr> | |
| <tr> | |
| <td>Belge kökündeki .htaccess dosyası</td> | |
| <td>RewriteRule "^images/(.+)\.jpg" "images/$1.gif"</td> | |
| </tr> | |
| <tr> | |
| <td>images dizinindeki .htaccess dosyası</td> | |
| <td>RewriteRule "^(.+)\.jpg" "$1.gif"</td> | |
| </tr> | |
| </table> | |
| <p><module>mod_rewrite</module> modülünün farklı bağlamlarda | |
| URL'leri nasıl değiştirdiği hakkında daha fazla bilgi için, | |
| yeniden yazma sırasında oluşturulan <a | |
| href="../mod/mod_rewrite.html#logging">günlük kayıtlarına</a> | |
| başvurmalısınız.</p> | |
| </section> | |
| <section id="InternalRuleset"><title>Kural Kümesi İşleme</title> | |
| <p>Şimdi <module>mod_rewrite</module> bu iki API aşamasında | |
| tetiklendiğinde, yapılandırılmış kural kümelerini yapılandırma | |
| yapısından okur (bu yapı sunucu başına bağlam için başlangıçta | |
| veya dizin başına bağlam için Apache çekirdeğinin dizin | |
| yürüyüşü sırasında oluşturulmuştur). Ardından URL yeniden | |
| yazma motoru içerilen kural kümesiyle (bir veya daha fazla kural | |
| ve bunların koşulları birlikte) başlatılır. URL yeniden yazma | |
| motorunun çalışması her iki yapılandırma bağlamı için de | |
| tamamen aynıdır. Yalnızca nihai sonuç işleme farklıdır.</p> | |
| <p>Kural kümesindeki kuralların sırası önemlidir; çünkü yeniden | |
| yazma motoru bunları özel (ve çok belirgin olmayan) bir sırada | |
| işler. Kural şudur: Yeniden yazma motoru kural kümesini kural | |
| kural (<directive module="mod_rewrite">RewriteRule</directive> | |
| yönergeleri) döner ve belirli bir kural eşleştiğinde isteğe | |
| bağlı olarak karşılık gelen koşulları (<code>RewriteCond</code> | |
| yönergeleri) döner. Tarihsel nedenlerle koşullar önce verilir | |
| ve bu nedenle kontrol akışı biraz dolambaçlıdır. Daha fazla | |
| ayrıntı için Şekil 1'e bakın.</p> | |
| <p class="figure"> | |
| <img src="../images/rewrite_process_uri.png" | |
| alt="RewriteRule ve RewriteCond eşleştirme akışı" /><br /> | |
| <dfn>Şekil 1:</dfn>Yeniden yazma kural kümesindeki kontrol akışı | |
| </p> | |
| <p>İlk olarak URL, her kuralın <em>Kalıp</em>'ıyla eşleştirilir. | |
| Başarısız olursa <module>mod_rewrite</module> bu kuralı hemen | |
| işlemeyi durdurur ve sonraki kuralla devam eder. <em>Kalıp</em> | |
| eşleşirse <module>mod_rewrite</module> karşılık gelen kural | |
| koşullarını (yapılandırmada RewriteRule'un hemen üstünde görünen | |
| RewriteCond yönergeleri) arar. Hiçbiri yoksa, URL'yi | |
| <em>Değiştirme</em> dizgesinden oluşturulan yeni bir değerle | |
| değiştirir ve kural döngüsüne devam eder. Ancak koşullar | |
| varsa, listelenme sırasına göre bunları işlemek için bir iç | |
| döngü başlatır. Koşullar için mantık farklıdır: geçerli URL'ye | |
| karşı bir kalıp eşleştirmeyiz. Bunun yerine, önce değişkenleri, | |
| geri başvuruları, eşlem aramalarını <em>vb.</em> genişleterek | |
| bir <em>SınamaDizgesi</em> oluştururuz ve ardından | |
| <em>KoşulKalıbı</em>'nı bununla eşleştirmeye çalışırız. Kalıp | |
| eşleşmezse, koşulların tamamı ve karşılık gelen kural başarısız | |
| olur. Kalıp eşleşirse, daha fazla koşul kalmayana kadar bir | |
| sonraki koşul işlenir. Tüm koşullar eşleşirse, URL'nin | |
| <em>Değiştirme</em> ile değiştirilmesiyle işleme devam | |
| eder.</p> | |
| </section> | |
| </manualpage> |