| <?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: 1933068:1934878 (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="remapping.xml.meta"> |
| <parentdocument href="./">Rewrite</parentdocument> |
| |
| <title>mod_rewrite ile Yeniden Yönlendirme ve Yeniden Eşleme</title> |
| |
| <summary> |
| |
| <p>Bu belge, <module>mod_rewrite</module> |
| <a href="../mod/mod_rewrite.html">başvuru belgelerini</a> tamamlar. |
| İstekleri yeniden yönlendirmek ve yeniden eşlemek için |
| <module>mod_rewrite</module> modülünü nasıl kullanabileceğinizi |
| açıklar. Her birinin nasıl çalıştığının ayrıntılı açıklamalarını |
| içeren birçok <module>mod_rewrite</module> kullanım örneği |
| sunar.</p> |
| |
| <note type="warning">Bu örneklerin birçoğunun sizin sunucu yapılandırmanızda |
| değişiklik yapılmadan çalışmayacağını unutmayın; bu nedenle örnekleri |
| yapılandırmanıza kopyalayıp yapıştırmak yerine anlamanız |
| önemlidir.</note> |
| |
| </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="old-to-new"> |
| |
| <title>Eskiden Yeniye (dahili)</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p><code>foo.html</code> sayfasını yakın zamanda |
| <code>bar.html</code> olarak yeniden adlandırdığımızı ve şimdi |
| geriye dönük uyumluluk için eski URL'yi sağlamak istediğimizi |
| varsayalım. Ancak eski URL kullanıcılarının sayfanın yeniden |
| adlandırıldığını fark etmemesini istiyoruz - yani adresin |
| tarayıcılarında değişmesini istemiyoruz.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>Eski URL'yi aşağıdaki kuralla dahili olarak yenisine yeniden |
| yazıyoruz:</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>/bar</strong>.html" [PT] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="old-to-new-extern"> |
| |
| <title>Eskiden Yeniye Yeniden Yazma (harici)</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Yine <code>foo.html</code> sayfasını yakın zamanda |
| <code>bar.html</code> olarak yeniden adlandırdığımızı ve şimdi |
| geriye dönük uyumluluk için eski URL'yi sağlamak istediğimizi |
| varsayalım. Ancak bu sefer eski URL kullanıcılarının yeni URL |
| hakkında bilgilendirilmesini istiyoruz, yani tarayıcılarının |
| Konum alanı da değişmeli.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>Tarayıcının ve dolayısıyla kullanıcının görünümünün |
| değişmesini sağlayan yeni URL'ye bir HTTP yönlendirmesi |
| zorluyoruz:</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>bar</strong>.html" [<strong>R</strong>] |
| </highlight> |
| </dd> |
| |
| <dt>Tartışma</dt> |
| |
| <dd> |
| <p>Bu örnekte, <a href="#old-to-new-intern">dahili</a> örneğin |
| aksine, basitçe Redirect yönergesini kullanabiliriz. Önceki |
| örnekte <module>mod_rewrite</module>, yönlendirmeyi istemciden |
| gizlemek için kullanılmıştı:</p> |
| |
| <highlight language="config"> |
| Redirect "/foo.html" "/bar.html" |
| </highlight> |
| |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="movehomedirs"> |
| |
| <title>Başka Bir Sunucuya Taşınan Kaynak</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Bir kaynak başka bir sunucuya taşındıysa, insanlar yer |
| imlerini güncellerken URL'lerin eski sunucuda bir süre daha |
| çalışmasını isteyebilirsiniz.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>Bu URL'leri yeni sunucuya yönlendirmek için |
| <module>mod_rewrite</module> kullanabilirsiniz, ancak Redirect |
| veya RedirectMatch yönergesini kullanmayı da |
| düşünebilirsiniz.</p> |
| |
| <highlight language="config"> |
| #mod_rewrite ile |
| RewriteEngine on |
| RewriteRule "^/docs/(.+)" "http://new.example.com/docs/$1" [R,L] |
| </highlight> |
| |
| <highlight language="config"> |
| #RedirectMatch ile |
| RedirectMatch "^/docs/(.*)" "http://new.example.com/docs/$1" |
| </highlight> |
| |
| <highlight language="config"> |
| #Redirect ile |
| Redirect "/docs/" "http://new.example.com/docs/" |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="static-to-dynamic"> |
| |
| <title>Statikten Devingene</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Statik bir sayfa olan <code>foo.html</code>'yi devingen bir |
| varyant olan <code>foo.cgi</code>'ye tarayıcı/kullanıcı fark |
| etmeden sorunsuz bir şekilde nasıl dönüştürebiliriz?</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>URL'yi CGI betiğine yeniden yazar ve işleyiciyi |
| <strong>cgi-script</strong> olarak zorlayarak bir CGI programı |
| olarak yürütülmesini sağlarız. Böylece |
| <code>/~quux/foo.html</code> isteği dahili olarak |
| <code>/~quux/foo.cgi</code>'nin çağrılmasına yol açar.</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteBase "/~quux/" |
| RewriteRule "^foo\.html$" "foo.cgi" [H=<strong>cgi-script</strong>] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="backward-compatibility"> |
| |
| <title>Dosya Uzantısı Değişikliği için Geriye Dönük Uyumluluk</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p><code>document.YYYY</code>'den <code>document.XXXX</code>'e |
| geçiş yaptıktan sonra, örneğin bir dizi <code>.html</code> |
| dosyasını <code>.php</code>'ye çevirdikten sonra URL'leri nasıl |
| geriye dönük uyumlu (sanal olarak hâlâ mevcut) yapabiliriz?</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>URL, yeni uzantılı hedef dosya mevcutsa ve eski uzantılı |
| orijinal dosya mevcut değilse eski uzantıdan yeni uzantıya |
| yeniden yazılır. Aksi takdirde URL değiştirilmeden bırakılır.</p> |
| |
| <highlight language="config"> |
| # document.html'yi document.php'ye yeniden yazma |
| # için geriye dönük uyumluluk kural kümesi |
| # yalnızca document.php varsa |
| <Directory "/var/www/htdocs"> |
| RewriteEngine on |
| RewriteBase "/var/www/htdocs" |
| |
| RewriteCond "$1.php" -f |
| RewriteCond "$1.html" !-f |
| RewriteRule "^(.*).html$" "$1.php" |
| </Directory> |
| </highlight> |
| </dd> |
| |
| <dt>Tartışma</dt> |
| <dd> |
| <p>Bu örnek, <module>mod_rewrite</module> modülünün genellikle |
| gözden kaçan bir özelliğini kullanır: kural kümesinin yürütme |
| sırasından yararlanır. Özellikle, <module>mod_rewrite</module> |
| RewriteCond yönergelerini değerlendirmeden önce RewriteRule'un |
| sol tarafını değerlendirir. Sonuç olarak, RewriteCond yönergeleri |
| değerlendirildiğinde $1 zaten tanımlanmış olur. Bu, aynı temel |
| dosya adını kullanarak orijinal (<code>document.html</code>) ve |
| hedef (<code>document.php</code>) dosyaların varlığını |
| sınamamıza olanak tanır.</p> |
| |
| <p>Bu kural kümesi dizin başına bağlamda (bir <Directory> |
| bloğunda veya bir .htaccess dosyasında) kullanılmak üzere |
| tasarlanmıştır; böylece <code>-f</code> kontrolleri doğru dizin |
| yoluna bakar. Çalıştığınız dizin tabanını belirtmek için bir |
| <directive module="mod_rewrite">RewriteBase</directive> yönergesi |
| ayarlamanız gerekebilir.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="canonicalhost"> |
| |
| <title>Kurallı Konak Adları</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd>Bu kuralın amacı, aynı siteye erişmek için kullanılabilecek |
| diğer konak adları yerine belirli bir konak adının |
| kullanılmasını zorlamaktır. Örneğin, |
| <strong>example.com</strong> yerine |
| <strong>www.example.com</strong> kullanılmasını zorlamak |
| istiyorsanız aşağıdaki tarifin bir varyantını |
| kullanabilirsiniz.</dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| |
| <p>Bunu çözmenin en iyi yolu <module>mod_rewrite</module> kullanmak |
| değil, kurallı olmayan konak ad(lar)ı için bir sanal konağa yerleştirilmiş |
| <directive module="mod_alias">Redirect</directive> yönergesini |
| kullanmaktır.</p> |
| |
| <highlight language="config"> |
| <VirtualHost *:80> |
| ServerName undesired.example.com |
| ServerAlias example.com notthis.example.com |
| |
| Redirect "/" "http://www.example.com/" |
| </VirtualHost> |
| |
| <VirtualHost *:80> |
| ServerName www.example.com |
| </VirtualHost> |
| </highlight> |
| |
| <p>Bunu alternatif olarak <directive module="core" |
| type="section">If</directive> yönergesini kullanarak da |
| gerçekleştirebilirsiniz: (<strong>2.4 ve sonrası</strong>)</p> |
| |
| <highlight language="config"> |
| <If "%{HTTP_HOST} != 'www.example.com'"> |
| Redirect "/" "http://www.example.com/" |
| </If> |
| </highlight> |
| |
| <p>Veya örneğin, sitenizin bir bölümünü HTTPS'ye yönlendirmek için |
| şunları yapabilirsiniz:</p> |
| |
| <highlight language="config"> |
| <If "%{SERVER_PROTOCOL} != 'HTTPS'"> |
| Redirect "/admin/" "https://www.example.com/admin/" |
| </If> |
| </highlight> |
| |
| <p>Herhangi bir nedenle hâlâ <module>mod_rewrite</module> kullanmak |
| istiyorsanız - örneğin buna daha büyük bir RewriteRules kümesiyle |
| birlikte ihtiyaç duyuyorsanız - aşağıdaki tariflerden birini |
| kullanabilirsiniz.</p> |
| |
| <p>80 dışında bir bağlantı noktasında çalışan siteler için:</p> |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteCond "%{SERVER_PORT}" "!^80$" |
| RewriteRule "^/?(.*)" "http://www.example.com:%{SERVER_PORT}/$1" [L,R,NE] |
| </highlight> |
| |
| <p>80 bağlantı noktasında çalışan bir site için</p> |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE] |
| </highlight> |
| |
| <p> |
| Bunu tüm alan adları için genel olarak yapmak istiyorsanız - |
| yani tüm olası <strong>example.com</strong> değerleri için |
| <strong>example.com</strong>'u |
| <strong>www.example.com</strong>'a yönlendirmek istiyorsanız - |
| aşağıdaki tarifi kullanabilirsiniz:</p> |
| |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\." [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE] |
| </highlight> |
| |
| <p>Bu kural kümeleri, ana sunucu yapılandırma dosyanızda veya |
| sunucunun <directive module="core">DocumentRoot</directive> |
| dizinine yerleştirilen bir <code>.htaccess</code> dosyasında |
| çalışacaktır.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="multipledirs"> |
| |
| <title>Birden Fazla Dizinde Sayfa Arama</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Belirli bir kaynak birkaç yerden birinde olabilir ve |
| istendiğinde bu yerlerde kaynağı aramak istiyoruz. Belki yakın |
| zamanda dizin yapımızı yeniden düzenledik ve içeriği birkaç |
| konuma böldük.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>Aşağıdaki kural kümesi, kaynağı bulmak için iki dizinde |
| arama yapar ve hiçbirinde bulamazsa istenen konumdan sunmayı |
| dener.</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| |
| # önce dir1/ içinde bulmayı dene |
| # ...ve bulunursa dur ve mutlu ol: |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI}" -f |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir1</strong>/$1" [L] |
| |
| # sonra dir2/ içinde bulmayı dene |
| # ...ve bulunursa dur ve mutlu ol: |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI}" -f |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir2</strong>/$1" [L] |
| |
| # yoksa diğer Alias veya ScriptAlias yönergeleri vb. için devam et. |
| RewriteRule "^" "-" [PT] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="archive-access-multiplexer"> |
| |
| <title>Coğrafi Olarak Dağıtılmış Sunuculara Yönlendirme</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Web sitemizin çok sayıda yansısı var ve insanları bulundukları |
| ülkedeki yansıya yönlendirmek istiyoruz.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>İstemcinin konak adına bakarak hangi ülkeden geldiklerini |
| belirliyoruz. IP adreslerini çözümleyemezsek öntanımlı bir |
| sunucuya geri dönüyoruz.</p> |
| <p>Kullanmak istediğimiz sunucuların listesini oluşturmak için |
| bir <directive module="mod_rewrite">RewriteMap</directive> |
| yönergesi kullanacağız.</p> |
| |
| <highlight language="config"> |
| HostnameLookups on |
| RewriteEngine on |
| RewriteMap multiplex "txt:/path/to/map.mirrors" |
| RewriteCond "%{REMOTE_HOST}" "([a-z]+)$" [NC] |
| RewriteRule "^/(.*)$" "${multiplex:<strong>%1</strong>|http://www.example.com/}$1" [R,L] |
| </highlight> |
| |
| <example> |
| ## map.mirrors -- Çoğullama Eşlem Dosyası<br /> |
| <br /> |
| de http://www.example.de/<br /> |
| uk http://www.example.uk/<br /> |
| com http://www.example.com/<br /> |
| ##EOF## |
| </example> |
| </dd> |
| |
| <dt>Tartışma</dt> |
| <dd> |
| <note type="warning">Bu kural kümesi, <directive |
| module="core">HostNameLookups</directive> yönergesinin |
| <code>on</code> olarak ayarlanmasına dayanır; bu da önemli bir |
| performans etkisi olabilir.</note> |
| |
| <p><directive module="mod_rewrite">RewriteCond</directive> |
| yönergesi, istemcinin konak adının son bölümünü - ülke kodunu - |
| yakalar ve ardından gelen RewriteRule bu değeri eşlem dosyasında |
| uygun yansı konağını aramak için kullanır.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="canonicalurl"> |
| |
| <title>Kurallı URL'ler</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Bazı web sunucularında bir kaynak için birden fazla URL |
| bulunur. Genellikle kurallı URL'ler (gerçekten kullanılan ve |
| dağıtılan) ve kısayollar, dahili URL'ler vb. vardır. Kullanıcı |
| istekle hangi URL'yi sağlamış olursa olsun, sonunda tarayıcı |
| adres çubuğunda kurallı olanı görmelidir.</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p>Tüm kurallı olmayan URL'leri tarayıcının Konum görünümünde |
| düzeltmek ve sonraki tüm istekler için harici bir HTTP |
| yönlendirmesi yapıyoruz. Aşağıdaki örnek kural kümesinde |
| <code>/puppies</code> ve <code>/canines</code> yollarını |
| kurallı <code>/dogs</code> ile değiştiriyoruz.</p> |
| |
| <highlight language="config"> |
| RewriteRule "^/(puppies|canines)/(.*)" "/dogs/$2" [R] |
| </highlight> |
| </dd> |
| |
| <dt>Tartışma:</dt> |
| <dd> |
| Bu gerçekten Redirect veya RedirectMatch yönergeleriyle |
| gerçekleştirilmelidir: |
| |
| <highlight language="config"> |
| RedirectMatch "^/(puppies|canines)/(.*)" "/dogs/$2" |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="moveddocroot"> |
| |
| <title>Taşınmış <code>DocumentRoot</code></title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| |
| <dd> |
| <p>Genellikle web sunucusunun <directive |
| module="core">DocumentRoot</directive> dizini doğrudan |
| "<code>/</code>" URL'siyle ilişkilidir. Ancak çoğu zaman bu veriler |
| gerçekten en üst düzey önceliğe sahip değildir. Örneğin, siteye ilk |
| giren ziyaretçilerin belirli bir <code>/about/</code> alt dizinine |
| yönlendirilmesini isteyebilirsiniz. Bu, aşağıdaki kural kümesi |
| kullanılarak gerçekleştirilebilir:</p> |
| </dd> |
| |
| <dt>Çözüm:</dt> |
| |
| <dd> |
| <p><code>/</code> URL'sini <code>/about/</code> adresine |
| yönlendiriyoruz:</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^/$" "/about/" [<strong>R</strong>] |
| </highlight> |
| |
| <p>Bunun <directive module="mod_alias">RedirectMatch</directive> |
| yönergesi kullanılarak da ele alınabileceğini unutmayın:</p> |
| |
| <highlight language="config"> |
| RedirectMatch "^/$" "http://example.com/about/" |
| </highlight> |
| |
| <p>Ayrıca örneğin yalnızca kök URL'yi yeniden yazdığını unutmayın. |
| Yani <code>http://example.com/</code> isteğini yeniden yazar ancak |
| <code>http://example.com/page.html</code> isteğini yeniden yazmaz. |
| Belge kökünüzü gerçekten değiştirdiyseniz - yani tüm içeriğiniz |
| aslında o alt dizindeyse - <directive |
| module="core">DocumentRoot</directive> yönergesini değiştirmek veya |
| tüm içeriği bir dizin yukarı taşımak, URL'leri yeniden yazmaktan |
| çok daha tercih edilir.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="fallback-resource"> |
| <title>Yedek Kaynak</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| <dd>Belirli bir dizine gelen tüm istekleri, bir resim veya css |
| dosyası gibi mevcut bir kaynağa gitmesi gerekenler dışında tek bir |
| kaynağın (örneğin index.php gibi belirli bir dosyanın) işlemesini |
| istiyorsunuz.</dd> |
| |
| <dt>Çözüm:</dt> |
| <dd> |
| <p>2.2.16 sürümünden itibaren bunun için <directive |
| module="mod_dir">FallbackResource</directive> yönergesini |
| kullanmalısınız:</p> |
| |
| <highlight language="config"> |
| <Directory "/var/www/my_blog"> |
| FallbackResource index.php |
| </Directory> |
| </highlight> |
| |
| <p>Ancak Apache'nin önceki sürümlerinde veya ihtiyaçlarınız bundan |
| daha karmaşıksa, aynı şeyi gerçekleştirmek için aşağıdaki yeniden |
| yazma kümesinin bir varyasyonunu kullanabilirsiniz:</p> |
| |
| <highlight language="config"> |
| <Directory "/var/www/my_blog"> |
| RewriteBase "/my_blog" |
| |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d |
| RewriteRule "^" "index.php" [PT] |
| </Directory> |
| </highlight> |
| |
| <p>Diğer taraftan, istenen URI'yi index.php'ye sorgu dizgesi |
| argümanı olarak geçirmek isterseniz, o RewriteRule'u şununla |
| değiştirebilirsiniz:</p> |
| |
| <highlight language="config"> |
| RewriteRule "(.*)" "index.php?$1" [PT,QSA] |
| </highlight> |
| |
| <p>Bu kural kümelerinin bir <code>.htaccess</code> dosyasında ve |
| bir <Directory> bloğunda da kullanılabileceğini unutmayın.</p> |
| |
| </dd> |
| |
| </dl> |
| |
| </section> |
| |
| <section id="rewrite-query"> |
| <title>Sorgu Dizgesini Yeniden Yazma</title> |
| |
| <dl> |
| <dt>Açıklama:</dt> |
| <dd>Bir sorgu dizgesinden belirli bir değeri yakalamak ve onu |
| değiştirmek veya URL'nin başka bir bileşenine dahil etmek |
| istiyorsunuz.</dd> |
| |
| <dt>Çözümler:</dt> |
| <dd> |
| <p>Bu bölümdeki çözümlerin birçoğu aynı koşulu kullanır; bu koşul |
| eşleşen değeri %2 geri başvurusunda bırakır. %1 sorgu dizgesinin |
| başlangıcıdır (ilgili anahtara kadar) ve %3 geri kalanıdır. Bu |
| koşul, esneklik ve değiştirmelerde çift '&&' oluşmasını |
| önlemek için biraz karmaşıktır.</p> |
| <ul> |
| <li>Bu çözüm eşleşen anahtarı ve değeri kaldırır: |
| |
| <highlight language="config"> |
| # mykey=??? öğesini kaldır |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteRule "(.*)" "$1?%1%3" |
| </highlight> |
| </li> |
| |
| <li>Bu çözüm, yakalanan değeri URL değiştirmesinde kullanır ve |
| sonuna '?' ekleyerek orijinal sorgu dizgesinin geri kalanını |
| atar: |
| |
| <highlight language="config"> |
| # Sorgu dizgesinden PATH_INFO'ya kopyala |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteRule "(.*)" "$1/products/%2/?" [PT] |
| </highlight> |
| </li> |
| |
| <li>Bu çözüm, yakalanan değeri sonraki bir koşulda kontrol eder: |
| |
| <highlight language="config"> |
| # Sorgu dizgesindeki mykey değerini yakala |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteCond "%2" !=not-so-secret-value |
| RewriteRule "(.*)" "-" [F] |
| </highlight> |
| </li> |
| |
| <li>Bu çözüm, önceki çözümlerin tersini gösterir: yol bileşenlerini |
| (belki PATH_INFO) URL'den sorgu dizgesine kopyalar. |
| <highlight language="config"> |
| # İstenen URL /products/kitchen-sink olabilir ve betik |
| # /path?products=kitchen-sink bekler. |
| RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT] |
| </highlight> |
| </li> |
| </ul> |
| |
| </dd> |
| |
| </dl> |
| </section> |
| |
| |
| </manualpage> |