<-
Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.5 > Rewrite

RewriteRule Bayrakları

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

Bu belge, RewriteRule yönergesinde kullanılabilecek bayrakları ayrıntılı açıklamalar ve örneklerle açıklar.

Ayrıca bakınız:

top

Giriş

Bir RewriteRule yönergesinin davranışı bir veya daha fazla bayrakla değiştirilebilir. Bayraklar kuralın sonunda köşeli parantez içinde belirtilir ve birden fazla bayrak virgülle ayrılır.

RewriteRule pattern target [Flag1,Flag2,Flag3]

Her bayrağın (birkaç istisna dışında) CO gibi kısa bir biçimi ve cookie gibi uzun bir biçimi vardır. Kısa biçim en yaygın olarak kullanılsa da, her bayrağın ne yapması gerektiğini hatırlamanız için uzun biçime aşina olmanız önerilir. Bazı bayraklar bir veya daha fazla argüman alır. Bayraklar büyük/küçük harf duyarsızdır.

İstekle ilişkili üstveriyi değiştiren bayraklar (T=, H=, E=), bir değiştirme ('-' dışında) aynı yeniden yazma işleme turunda gerçekleştirildiğinde dizin başına ve htaccess bağlamında etkili olmaz.

Burada mevcut bayrakların her biri, nasıl kullanabileceğinize dair bir örnekle birlikte sunulmaktadır.

top

B (geri başvuruları kodla)

[B] bayrağı, RewriteRule yönergesine dönüşümü uygulamadan önce alfasayısal olmayan karakterleri kodlamasını söyler.

mod_rewrite URL'leri eşlemeden önce kodlarını çözmek zorundadır, bu nedenle geri başvurular uygulandığında kodları çözülmüş olur. B bayrağı kullanıldığında, geri başvurulardaki alfasayısal olmayan karakterler kodlanır. Örneğin, şu kuralı ele alalım:

Sunucu değişkenlerinin benzer şekilde kodlanması için "escape" eşleme işlevine bakın

RewriteRule "^search/(.*)$" "/search.php?term=$1"

Arama terimi 'x & y/z' olduğunda, tarayıcı bunu 'x%20%26%20y%2Fz' olarak kodlar ve istek 'search/x%20%26%20y%2Fz' olur. B bayrağı olmadan bu yeniden yazma kuralı 'search.php?term=x & y/z' ile eşleşir ki bu geçerli bir URL değildir ve search.php?term=x%20&y%2Fz= olarak kodlanır, bu da amaçlanan değildir.

Aynı kuralda B bayrağı ayarlandığında, parametreler çıktı URL'sine geçirilmeden önce yeniden kodlanır ve doğru bir eşleme olan /search.php?term=x%20%26%20y%2Fz elde edilir.

RewriteRule "^search/(.*)$" "/search.php?term=$1" [B,PT]

Bu belirli örneğin çalışması için AllowEncodedSlashes yönergesini On olarak ayarlamanız gerekebileceğini unutmayın; çünkü httpd URL'lerde kodlanmış eğik çizgilere izin vermez ve bir tane görürse 404 döndürür.

Bu kodlama özellikle vekil durumunda gereklidir; arka uç, kodları çözülmüş bir URL ile karşılaşırsa bozulabilir.

Bu bayrağa bir alternatif, %{THE_REQUEST} değerine karşı yakalama yapan bir RewriteCond kullanmaktır; bu, dizgeleri kodlanmış biçimde yakalar.

2.4.26 ve sonrasında, geri başvurulardaki kodlamayı belirli karakterlerle sınırlayabilirsiniz: [B=#?;]. Not: Boşluk karakteri kodlanacak karakterler listesinde kullanılabilir, ancak RewriteRule yönergesinin üçüncü argümanının tamamını tırnak içine almanız ve boşluğun listenin son karakteri olmaması gerekir.

# Boşlukları ve soru işaretlerini kodla. Son argüman etrafındaki
# tırnak işaretleri, boşluk dahil edildiğinde gereklidir.
RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B= ?]"

Bu şekilde kodlanan karakterleri sınırlamak için #flag_bne ve #flag_bctls bayraklarına bakın

top

BNP|backrefnoplus (boşluğu +'ya kodlama)

[BNP] bayrağı, RewriteRule yönergesine geri başvurulardaki boşluk karakterini '+' yerine %20 olarak kodlamasını söyler. Geri başvuru sorgu dizgesi yerine yol bileşeninde kullanılacaksa yararlıdır.

# Form gönderimi yoluyla sorgu dizgesinde kullanılan + yerine yolda
# boşlukları %20 olarak kodla
RewriteRule "^search/(.*)$" "/search.php/$1" "[B,BNP]"

Bu bayrak 2.4.26 ve sonraki sürümlerde mevcuttur.

top

BCTLS

[BCTLS] bayrağı [B] bayrağına benzer, ancak yalnızca kontrol karakterlerini ve boşluk karakterini kodlar. Bu, sorgu dizgesine kodlanmadan kopyalandıklarında reddedilen karakter kümesiyle aynıdır.

# Kontrol karakterlerini ve boşlukları kodla
RewriteRule "^search/(.*)$" "/search.php/$1" "[BCTLS]"

Bu bayrak 2.5.1 ve sonraki sürümlerde mevcuttur.

top

BNE

[BNE=...] içindeki karakter listesi, [B] veya [BCTLS] bayraklarının karakterlerinden istisna olarak değerlendirilir. Listelenen karakterler kodlanmayacaktır.

# Öntanımlı karakterleri kodla, ancak / karakterini bırak
RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B,BNE=/]"

Bu bayrak 2.5.1 ve sonraki sürümlerde mevcuttur.

top

C|chain

[C] veya [chain] bayrağı, RewriteRule yönergesinin bir sonraki kurala zincirleneceğini belirtir. Yani, kural eşleşirse her zamanki gibi işlenir ve denetim bir sonraki kurala geçer. Ancak eşleşmezse bir sonraki kural ve birlikte zincirlenen diğer kurallar atlanır.

top

CO|cookie

[CO] veya [cookie] bayrağı, belirli bir RewriteRule eşleştiğinde bir çerez ayarlamanıza olanak tanır. Argüman üç zorunlu ve beş isteğe bağlı alandan oluşur.

Bayrağın tüm öznitelikler dahil tam sözdizimi şöyledir:

[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly:samesite]

Çerez alanlarından herhangi birinde birebir ':' karakterine ihtiyaç duyulursa, alternatif bir sözdizimi mevcuttur. Alternatif sözdizimini etkinleştirmek için çerez "Name" alanının önüne ';' karakteri konulmalı ve alan ayırıcıları ';' olarak belirtilmelidir.

[CO=;NAME;VALUE:MOREVALUE;DOMAIN;lifetime;path;secure;httponly;samesite]

Çerezin ayarlanması için bir ad, bir değer ve bir alan adı bildirmelisiniz.

Alan Adı (Domain)
Çerezin geçerli olmasını istediğiniz alan adı. Bu, www.example.com gibi bir konak adı veya .example.com gibi bir alan adı olabilir. En az iki parçadan oluşmalı ve bir nokta ile ayrılmalıdır. Yani yalnızca .com veya .net olamaz. Bu tür çerezler çerez güvenlik modeli tarafından yasaklanmıştır.

İsteğe bağlı olarak aşağıdaki değerleri de ayarlayabilirsiniz:

Ömür (Lifetime)
Çerezin kalıcı olacağı süre, dakika cinsinden.
0 değeri, çerezin yalnızca geçerli tarayıcı oturumu süresince kalıcı olacağını belirtir. Hiçbir değer belirtilmezse bu öntanımlı değerdir.
Negatif bir değer, çerezin tarayıcıda silinmesine neden olur.
Yol (Path)
Geçerli web sitesinde çerezin geçerli olduğu yol; /customers/ veya /files/download/ gibi.
Öntanımlı olarak / olarak ayarlanır - yani web sitesinin tamamı.
Güvenli (Secure)
secure, true veya 1 olarak ayarlanırsa, çerez yalnızca güvenli (https) bağlantılar üzerinden aktarılabilir.
httponly
HttpOnly, true veya 1 olarak ayarlanırsa, çerez HttpOnly bayrağıyla ayarlanır; bu, çerezin bu özelliği destekleyen tarayıcılarda JavaScript koduna erişilemez olduğu anlamına gelir.
samesite
false veya 0 dışında bir değere ayarlanırsa, SameSite özniteliği belirtilen değere ayarlanır. Tipik değerler None, Lax ve Strict'tir. 2.5.1 ve sonrasında mevcuttur.

Şu örneği ele alalım:

RewriteEngine On
RewriteRule   "^/index\.html"   "-" [CO=frontdoor:yes:.example.com:1440:/]

Verilen örnekte, kural isteği yeniden yazmaz. "-" yeniden yazma hedefi, mod_rewrite modülüne isteği değiştirmeden geçirmesini söyler. Bunun yerine, 'frontdoor' adlı bir çerezi 'yes' değeriyle ayarlar. Çerez .example.com alan adındaki herhangi bir konak için geçerlidir. 1440 dakika (24 saat) sonra sona erecek şekilde ayarlanır ve tüm URI'ler için döndürülür.

top

DPI|discardpath

DPI bayrağı, yeniden yazılmış URI'nin PATH_INFO bölümünün atılmasına neden olur.

Bu bayrak 2.2.12 ve sonraki sürümlerde mevcuttur.

Dizin başına bağlamda, her RewriteRule yönergesinin karşılaştırdığı URI, URI'nin ve PATH_INFO'nun geçerli değerlerinin birleşimidir.

Geçerli URI, istemcinin istediği ilk URI, önceki bir mod_rewrite işleme turunun sonucu veya geçerli mod_rewrite işleme turundaki önceki bir kuralın sonucu olabilir.

Buna karşılık, her kuraldan önce URI'ye eklenen PATH_INFO yalnızca bu mod_rewrite işleme turundan önceki PATH_INFO değerini yansıtır. Sonuç olarak, URI'nin büyük bölümleri birden fazla RewriteRule yönergesinde bir değiştirmeye eşlenip kopyalanırsa ve URI'nin hangi bölümlerinin geçerli PATH_INFO'dan geldiğine dikkat edilmezse, son URI'ye PATH_INFO'nun birden fazla kopyası eklenebilir.

Bu bayrağı, önceki dosya sistemi eşlemesinden kaynaklanan PATH_INFO'nun ilgilendirmediği herhangi bir değiştirmede kullanın. Bu bayrak, bu mod_rewrite işleme turu başlamadan önce oluşturulan PATH_INFO'yu kalıcı olarak unutur. PATH_INFO, geçerli mod_rewrite işleme turu tamamlanana kadar yeniden hesaplanmaz. Bu tur boyunca sonraki kurallar, yalnızca değiştirmelerin doğrudan sonucunu görür; eklenmiş bir PATH_INFO olmaz.

top

E|env

[E] veya [env] bayrağıyla bir ortam değişkeninin değerini ayarlayabilirsiniz. Bazı ortam değişkenlerinin kural çalıştıktan sonra ayarlanabileceğini ve böylece ayarladığınız değeri geçersiz kılabileceğini unutmayın. Ortam değişkenlerinin nasıl çalıştığı hakkında daha fazla ayrıntı için Ortam Değişkenleri belgesine bakın.

Bu bayrağın tam sözdizimi şöyledir:

[E=VAR:VAL]
[E=!VAR]

VAL, genişletilen geri başvurular ($N veya %N) içerebilir.

Kısa biçimi kullanarak

[E=VAR]

VAR adlı ortam değişkenini boş bir değere ayarlayabilirsiniz.

Şu biçim

[E=!VAR]

daha önce ayarlanmış VAR adlı ortam değişkeninin silinmesine olanak tanır.

Ortam değişkenleri daha sonra CGI programları, diğer RewriteRule yönergeleri veya CustomLog yönergeleri dahil olmak üzere çeşitli bağlamlarda kullanılabilir.

Aşağıdaki örnek, istenen URI bir resim dosyasıysa 'image' adlı bir ortam değişkenini '1' değerine ayarlar. Daha sonra bu ortam değişkeni, bu istekleri erişim günlüğünden dışlamak için kullanılır.

RewriteRule "\.(png|gif|jpg)$"   "-" [E=image:1]
CustomLog   "logs/access_log"    combined env=!image

Aynı etkinin SetEnvIf kullanılarak elde edilebileceğini unutmayın. Bu teknik bir öneri olarak değil, bir örnek olarak sunulmuştur.

top

END

[END] bayrağı kullanmak, yalnızca geçerli yeniden yazma işleme turunu durdurmakla kalmaz ([L] gibi), aynı zamanda dizin başına (htaccess) bağlamda sonraki yeniden yazma işlemlerinin de gerçekleşmesini engeller.

Bu, harici yönlendirmelerden kaynaklanan yeni istekler için geçerli değildir.

top

F|forbidden

[F] bayrağı kullanmak, sunucunun istemciye 403 Yasak durum kodu döndürmesine neden olur. Aynı davranış Deny yönergesiyle de gerçekleştirilebilir ancak bu, Yasak durumu atamada daha fazla esneklik sağlar.

Aşağıdaki kural, .exe dosyalarının sunucunuzdan indirilmesini yasaklar.

RewriteRule "\.exe"   "-" [F]

Bu örnek, yeniden yazma hedefi için "-" sözdizimini kullanır; bu, istenen URI'nin değiştirilmediği anlamına gelir. İsteği yasaklayacaksanız başka bir URI'ye yeniden yazmanın bir nedeni yoktur.

[F] kullanıldığında, [L] zımnen uygulanır - yani yanıt hemen döndürülür ve başka kural değerlendirilmez.

top

G|gone

[G] bayrağı, sunucuyu yanıtla birlikte 410 Kalktı durum kodu döndürmeye zorlar. Bu, bir kaynağın eskiden mevcut olduğunu ancak artık mevcut olmadığını belirtir.

[F] bayrağında olduğu gibi, [G] bayrağını kullanırken genellikle yeniden yazma hedefi için "-" sözdizimini kullanırsınız:

RewriteRule "oldproduct"   "-" [G,NC]

[G] kullanıldığında, [L] zımnen uygulanır - yani yanıt hemen döndürülür ve başka kural değerlendirilmez.

top

H|handler

Elde edilen isteğin belirtilen işleyici ile işlenmesini zorlar. Örneğin, dosya uzantısı olmayan tüm dosyaların php işleyicisi tarafından çözümlenmesini zorlamak için kullanılabilir:

RewriteRule "!\."  "-" [H=application/x-httpd-php]

Yukarıdaki düzenli ifade - !\. - birebir . karakterini içermeyen herhangi bir istekle eşleşir.

Bu, bazı koşullara dayalı olarak işleyiciyi zorlamak için de kullanılabilir. Örneğin, sunucu bağlamında kullanılan aşağıdaki kod parçası, .phps uzantısıyla istendiğinde .php dosyalarının mod_php tarafından görüntülenmesini sağlar:

RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]

Yukarıdaki düzenli ifade - ^(/source/.+\.php)s$ - /source/ ile başlayan, ardından 1 veya n karakter gelen ve birebir .phps ile biten herhangi bir istekle eşleşir. $1 geri başvurusu, düzenli ifadenin parantez içindeki yakalanan eşleşmeye referans verir.

top

L|last

[L] bayrağı, mod_rewrite modülünün kural kümesini işlemeyi durdurmasına neden olur. Çoğu bağlamda, kural eşleşirse başka kural işlenmeyeceği anlamına gelir. Bu, Perl'deki last komutuna veya C'deki break komutuna karşılık gelir. Bu bayrağı, geçerli kuralın diğer kurallar dikkate alınmadan hemen uygulanması gerektiğini belirtmek için kullanın.

RewriteRule yönergesini .htaccess dosyalarında veya <Directory> bölümlerinde kullanıyorsanız, kuralların nasıl işlendiğini anlamanız önemlidir. Bunun basitleştirilmiş biçimi, kurallar işlendikten sonra yeniden yazılmış isteğin URL çözümleme motoruna geri verildiğidir. Yeniden yazılmış istek işlenirken .htaccess dosyası veya <Directory> bölümüyle tekrar karşılaşılması ve kural kümesinin baştan çalıştırılması mümkündür. En yaygın olarak bu, kurallardan birinin dahili veya harici bir yönlendirmeye neden olması durumunda olur ve istek sürecinin yeniden başlamasına yol açar.

Bu nedenle, RewriteRule yönergelerini bu bağlamlardan birinde kullanıyorsanız, kuralların döngüye girmesinden kaçınmak için açık adımlar atmanız ve bir dizi kuralın yürütülmesini sonlandırmak için yalnızca [L] bayrağına güvenmemeniz önemlidir; aşağıda gösterildiği gibi.

Alternatif bir bayrak olan [END], yalnızca geçerli yeniden yazma işleme turunu sonlandırmak için değil, aynı zamanda dizin başına (htaccess) bağlamda sonraki yeniden yazma işlemlerinin de gerçekleşmesini engellemek için kullanılabilir. Bu, harici yönlendirmelerden kaynaklanan yeni istekler için geçerli değildir.

Burada verilen örnek, herhangi bir isteği index.php'ye yeniden yazar ve orijinal isteği index.php'ye sorgu dizgesi argümanı olarak verir; ancak RewriteCond, istek zaten index.php için ise RewriteRule yönergesinin atlanmasını sağlar.

RewriteBase "/"
RewriteCond "%{REQUEST_URI}" !=/index.php
RewriteRule "^(.*)"          "/index.php?req=$1" [L,PT]
top

N|next

[N] bayrağı, kural kümesinin şimdiye kadarki sonucu başlangıç noktası olarak kullanarak en baştan yeniden başlamasına neden olur. Döngüye neden olabileceğinden son derece dikkatli kullanın.

[Next] bayrağı, örneğin bir istekteki belirli bir dizgeyi veya harfi tekrar tekrar değiştirmek istediğinizde kullanılabilir. Burada gösterilen örnek, bir istekteki her yerde A'yı B ile değiştirecek ve değiştirilecek A kalmayana kadar bunu yapmaya devam edecektir.

RewriteRule "(.*)A(.*)" "$1B$2" [N]

Bunu bir while döngüsü olarak düşünebilirsiniz: Bu kalıp hâlâ eşleştiği sürece (yani URI hâlâ bir A içerdiği sürece), bu değiştirmeyi yap (yani A'yı B ile değiştir).

2.5.0 ve sonrasında, bu modül istenmeyen döngülere karşı koruma sağlamak için 10.000 yinelemeden sonra hata döndürür. N bayrağına eklenerek alternatif bir maksimum yineleme sayısı belirtilebilir.

# Döngünün her geçişinde 1 karakter değiştirmeye razı ol
RewriteRule "(.+)[><;]$" "$1" [N=32000]
# ... veya 10 döngüden sonra vazgeç
RewriteRule "(.+)[><;]$" "$1" [N=10]
top

NC|nocase

[NC] bayrağının kullanımı, RewriteRule yönergesinin büyük/küçük harf duyarsız biçimde eşleştirilmesine neden olur. Yani eşleşen URI'de harflerin büyük veya küçük harf olarak görünüp görünmediği önemli değildir.

Aşağıdaki örnekte, herhangi bir resim dosyası isteği özel resim sunucunuza vekil olarak iletilir. Eşleşme büyük/küçük harf duyarsızdır; bu nedenle örneğin hem .jpg hem de .JPG dosyaları kabul edilir.

RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]
top

NE|noescape

Öntanımlı olarak, bir RewriteRule harici yönlendirmeyle sonuçlandığında, çıktıda aşağıdaki güvenli küme dışında kalan karakterler onaltılık kod (yüzde kodlu) eşdeğerlerine dönüştürülür:

Örneğin, # karakteri %23'e ve ? karakteri %3F'e dönüştürülür. % karakteri de kodlanır (%25'e), bu da değiştirmede zaten mevcut olan yüzde kodlamanın çift kodlanacağı anlamına gelir.

[NE] bayrağı kullanmak bu kodlamayı engeller ve # ile ? gibi karakterlerin yönlendirme URL'sine değiştirilmeden geçmesine olanak tanır.

RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]

Yukarıdaki örnek /anchor/xyz adresini /bigpage.html#xyz adresine yönlendirecektir. [NE] kullanılmazsa # karakteri onaltılık kod eşdeğeri olan %23'e dönüştürülür ve bu da 404 Bulunamadı hata durumuna yol açar.

top

NS|nosubreq

[NS] bayrağının kullanımı, kuralın alt isteklerde kullanılmasını engeller. Örneğin, SSI (Sunucu Tarafı Dahil Etme) kullanılarak dahil edilen bir sayfa bir alt istektir ve bu alt isteklerde yeniden yazmaların gerçekleşmesini engellemek isteyebilirsiniz. Ayrıca, mod_dir olası dizin öntanımlı dosyaları (örneğin index.html dosyaları) hakkında bilgi edinmeye çalıştığında, bu bir dahili alt istektir ve genellikle bu tür alt isteklerde yeniden yazmaları engellemek istersiniz. Alt isteklerde, kuralların tamamının uygulanması her zaman yararlı olmaz ve hatalara bile neden olabilir. Sorunlu kuralları dışlamak için bu bayrağı kullanın.

Bu kuralı kullanıp kullanmamaya karar vermek için: URL'leri CGI betikleriyle ön ekliyorsanız ve bunların CGI betiği tarafından işlenmesini zorluyorsanız, alt isteklerde sorunlarla (veya önemli ek yükle) karşılaşmanız olasıdır. Bu durumlarda bu bayrağı kullanın.

Bir HTML sayfasının parçası olarak yüklenen resimler, javascript dosyaları veya css dosyaları alt istek değildir - tarayıcı bunları ayrı HTTP istekleri olarak ister.

top

P|proxy

[P] bayrağının kullanımı, isteğin mod_proxy tarafından işlenmesine ve bir vekil isteği üzerinden ele alınmasına neden olur. Örneğin, tüm resim isteklerinin bir arka uç resim sunucusu tarafından işlenmesini istiyorsanız, şöyle bir şey yapabilirsiniz:

RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]

[P] bayrağının kullanımı [L] anlamına gelir - yani istek hemen vekil üzerinden iletilir ve sonraki kurallar dikkate alınmaz.

Değiştirme dizgesinin mod_proxy tarafından işlenebilecek geçerli bir URI olduğundan (genellikle http://konakadı ile başlayan) emin olmalısınız. Değilse, vekil modülünden bir hata alırsınız. Bu bayrağı, uzak içeriği yerel sunucunun ad alanına eşlemek için ProxyPass yönergesinin daha güçlü bir uygulamasını gerçekleştirmek için kullanın.

Güvenlik Uyarısı

Kuralın hedef URL'sini oluştururken, istemcinin sunucunuzun vekil olarak davranacağı URL kümesi üzerindeki etkisinin güvenlik sonuçlarını dikkate alın. URL'nin şema ve konak adı bölümünün ya sabit olduğundan ya da istemciye gereksiz etki izni vermediğinden emin olun.

Performans uyarısı

Bu bayrağı kullanmak, kalıcı bağlantıları yönetmeyen öntanımlı işçi bu durumda kullanıldığından bağlantı havuzlama/yeniden kullanımı olmaksızın mod_proxy kullanımını tetikler.

Kalıcı bağlantıları kullanmak için en azından hedef URL'nin şema ve konak bölümü için örneğin bir zaman aşımı ayarladığınız ProxySet yönergesi içeren bir Proxy bloğu kurmalısınız.

ProxyPass veya ProxyPassMatch ile kurarsanız kalıcı bağlantılar otomatik olarak kullanılacaktır.

Not: Bu bayrağı kullanmak için mod_proxy etkinleştirilmiş olmalıdır.

top

PT|passthrough

Bir RewriteRule'daki hedef (veya değiştirme dizgesi) öntanımlı olarak bir dosya yolu olarak kabul edilir. [PT] bayrağının kullanılması, bunun yerine bir URI olarak işlenmesine neden olur. Yani, [PT] bayrağının kullanılması, RewriteRule sonucunun, Alias, Redirect veya ScriptAlias gibi konum tabanlı eşlemelerin etki edebilmesi için URL eşlemesine geri iletilmesine neden olur.

Örneğin, /icons için bir Alias tanımınız varsa ve oraya işaret eden bir RewriteRule varsa, Alias yönergesinin değerlendirilmesini sağlamak için [PT] bayrağını kullanmalısınız.

Alias "/icons" "/usr/local/apache/icons"
RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]

Bu durumda [PT] bayrağının atlanması, Alias'ın yok sayılmasına neden olur ve 'Dosya bulunamadı' hatası döndürülür.

PT bayrağı L bayrağını ima eder: isteği bir sonraki işleme aşamasına geçirmek için yeniden yazma durdurulur.

PT bayrağının <Directory> bölümleri veya .htaccess dosyaları gibi dizin başına bağlamlarda zımnen uygulandığını unutmayın. Bundan kaçınmanın tek yolu -'ye yeniden yazmaktır.

top

QSA|qsappend

Değiştirme URI'si bir sorgu dizgesi içerdiğinde, RewriteRule yönergesinin öntanımlı davranışı mevcut sorgu dizgesini atıp yeni oluşturulanla değiştirmektir. [QSA] bayrağı kullanmak sorgu dizgelerinin birleştirilmesine neden olur.

Şu kuralı ele alalım:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

[QSA] bayrağıyla, /pages/123?one=two isteği /page.php?page=123&one=two ile eşlenir. [QSA] bayrağı olmadan, aynı istek /page.php?page=123 ile eşlenir - yani mevcut sorgu dizgesi atılır.

top

QSD|qsdiscard

İstenen URI bir sorgu dizgesi içerdiğinde ve hedef URI içermediğinde, RewriteRule yönergesinin öntanımlı davranışı o sorgu dizgesini hedef URI'ye kopyalamaktır. [QSD] bayrağı kullanmak sorgu dizgesinin atılmasına neden olur.

Bu bayrak 2.4.0 ve sonraki sürümlerde mevcuttur.

[QSD] ve [QSA] birlikte kullanıldığında [QSD] öncelikli olur.

Hedef URI bir sorgu dizgesine sahipse, öntanımlı davranış gözlemlenir - yani orijinal sorgu dizgesi atılır ve RewriteRule hedef URI'sindeki sorgu dizgesiyle değiştirilir.

top

QSL|qslast

Öntanımlı olarak, değiştirmedeki ilk (en soldaki) soru işareti yolu sorgu dizgesinden ayırır. [QSL] bayrağı kullanmak, RewriteRule yönergesine iki bileşeni son (en sağdaki) soru işaretini kullanarak ayırmasını söyler.

Bu, dosya adlarında birebir soru işaretleri bulunan dosyalara eşleme yaparken yararlıdır. Değiştirmede sorgu dizgesi kullanılmıyorsa, bu bayrakla birlikte sonuna bir soru işareti eklenebilir.

Bu bayrak 2.4.19 ve sonraki sürümlerde mevcuttur.

top

R|redirect

[R] bayrağı kullanmak, tarayıcıya bir HTTP yönlendirmesi verilmesine neden olur. Tam nitelikli bir URL belirtilmişse (yani http://sunucuadı/ dahil), o konuma bir yönlendirme verilir. Aksi takdirde, yönlendirmeyle gönderilen URL'yi oluşturmak için geçerli protokol, sunucu adı ve bağlantı noktası numarası kullanılır.

[R=305] sözdizimi kullanılarak geçerli herhangi bir HTTP yanıt durum kodu belirtilebilir; hiçbiri belirtilmezse öntanımlı olarak 302 durum kodu kullanılır. Belirtilen durum kodunun mutlaka bir yönlendirme (3xx) durum kodu olması gerekmez. Ancak durum kodu yönlendirme aralığının (300-399) dışındaysa değiştirme dizgesi tamamen atılır ve L kullanılmış gibi yeniden yazma durdurulur.

Yanıt durum kodlarına ek olarak, yönlendirme durumunu sembolik adlarıyla da belirtebilirsiniz: temp (öntanımlı), permanent veya seeother.

[R] bayrağını neredeyse her zaman [L] ile birlikte kullanmak istersiniz (yani [R,L] kullanın); çünkü [R] bayrağı tek başına URI'nin önüne http://bukonak[:buport] ekler ancak bunu kural kümesindeki bir sonraki kurala geçirir ve bu da çoğu zaman 'İstekte Geçersiz URI' uyarılarına neden olabilir.

Not: httpd yalnızca HTTP belirtiminde bulunan durum kodlarını destekler. Tanınmayan bir durum kodu kullanmak 500 hatasına ve hata günlüğü mesajına neden olacaktır.

top

S|skip

[S] bayrağı, çalıştırmak istemediğiniz kuralları atlamak için kullanılır. Atlama bayrağının sözdizimi [S=N]'dir; burada N atlanacak kural sayısını belirtir (RewriteRule ve ondan önceki RewriteCond yönergeleri eşleştiği takdirde). Bu, yeniden yazma kural kümenizde bir goto deyimi olarak düşünülebilir. Aşağıdaki örnekte, RewriteRule yönergesini yalnızca istenen URI gerçek bir dosyaya karşılık gelmiyorsa çalıştırmak istiyoruz.

# İstek var olmayan bir dosya için mi?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# Öyleyse, bu iki RewriteRule'u atla
RewriteRule ".?"                  "-" [S=2]

RewriteRule "(.*\.gif)"           "images.php?$1"
RewriteRule "(.*\.html)"          "docs.php?$1"

Bu teknik yararlıdır; çünkü bir RewriteCond yalnızca hemen ardından gelen RewriteRule için geçerlidir. Bu nedenle, bir RewriteCond'un birkaç RewriteRule için geçerli olmasını istiyorsanız, olası bir teknik bu koşulları olumsuzlamak ve [Skip] bayrağıyla bir RewriteRule eklemektir. Bunu, sözde if-then-else yapıları oluşturmak için kullanabilirsiniz: then yan tümcesinin son kuralı skip=N olur; burada N, else yan tümcesindeki kural sayısıdır:

# Dosya var mı?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# "else" kısmına gitmek istiyorsak 3 satır atlayarak bir if-then-else yapısı oluştur.
RewriteRule ".?"                  "-" [S=3]

# EĞER dosya varsa:
    RewriteRule "(.*\.gif)"  "images.php?$1"
    RewriteRule "(.*\.html)" "docs.php?$1"
    # "else" kısmını atla.
    RewriteRule ".?"         "-" [S=1]
# DEĞİLSE...
    RewriteRule "(.*)"       "404.php?file=$1"
# SON

Bu tür yapılandırmayı, bunun yerine <If>, <ElseIf> ve <Else> yönergelerini kullanarak gerçekleştirmek muhtemelen daha kolaydır.

top

T|type

Elde edilen yanıtın gönderileceği MIME türünü ayarlar. Bu, AddType yönergesiyle aynı etkiye sahiptir.

Örneğin, Perl kaynak kodunu belirli bir şekilde istendiğinde düz metin olarak sunmak için aşağıdaki tekniği kullanabilirsiniz:

# .pl dosyalarını düz metin olarak sun
RewriteRule "\.pl$"  "-" [T=text/plain]

Veya dosya uzantısı olmayan jpeg resimleri üreten bir kameranız varsa, bu resimlerin dosya adlarına bakarak doğru MIME türüyle sunulmasını zorlayabilirsiniz:

# Adında 'IMG' bulunan dosyalar jpg resimlerdir.
RewriteRule "IMG"  "-" [T=image/jpg]

Bunun önemsiz bir örnek olduğunu ve bunun yerine <FilesMatch> kullanılarak daha iyi yapılabileceğini lütfen unutmayın. Yeniden yazmaya başvurmadan önce her zaman bir soruna alternatif çözümleri düşünün; yeniden yazma her zaman alternatiflerden daha az verimli bir çözüm olacaktır.

Dizin başına bağlamda kullanılıyorsa, mod_rewrite işlemesinin tüm turu boyunca değiştirme olarak yalnızca - (tire) kullanın; aksi takdirde dahili yeniden işleme (sonraki mod_rewrite işleme turları dahil) nedeniyle bu bayrakla ayarlanan MIME türü kaybolur. L bayrağı bu bağlamda mod_rewrite işlemesinin geçerli turunu sonlandırmak için yararlı olabilir.

top

UnsafeAllow3F

Yazılmakta olan HTTP isteğinde kodlanmış bir soru işareti '%3f' varsa ve yeniden yazılmış sonucun değiştirmesinde '?' varsa, yeniden yazmanın devam etmesine izin vermek için bu bayrağın ayarlanması gereklidir. Bu, kodlanmış soru işaretinin yakalanması ve yeniden değiştirilmesinden yararlanan kötü niyetli bir URL'ye karşı koruma sağlar.

top

UnsafePrefixStat

Sunucu kapsamlı değiştirmeler bir değişken veya geri başvuru ile başlayıp bir dosya sistemi yoluna çözümlendiğinde bu bayrağın ayarlanması gereklidir. Bu değiştirmeler belge kökü ile öneklenmez. Bu, genişletilmiş değiştirmenin beklenmeyen bir dosya sistemi konumuna eşlenmesine neden olan kötü niyetli bir URL'ye karşı koruma sağlar.

Available in Apache HTTP Server 2.5.1 and later.

top

UNC

Bu bayrağın ayarlanması, Windows UNC yollarında kullanıldığı gibi birden fazla baştaki eğik çizginin birleştirilmesini engeller. Kural değiştirmesi birden fazla birebir eğik çizgi ile başladığında bayrak gerekli değildir.

Available in Apache HTTP Server 2.5.1 and later.

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn