Apache HTTP Sunucusu Sürüm 2.5

Bu belge, mod_rewrite
başvuru belgelerini tamamlar.
mod_rewrite hakkındaki belki de en önemli kavramlardan
birini açıklar: ne zaman kullanılmaması gerektiğini.
mod_rewrite, diğer alternatiflerin yetersiz kaldığı
durumlarda son çare olarak düşünülmelidir. Daha basit alternatifler
varken kullanılması, kafa karıştırıcı, kırılgan ve bakımı zor
yapılandırmalara yol açar. Hangi alternatiflerin mevcut olduğunu
anlamak, mod_rewrite konusunda uzmanlaşmanın çok
önemli bir adımıdır.
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.
mod_rewrite modülünün doğru araç olduğu en yaygın
durum, en iyi çözümün sunucu yapılandırma dosyalarına erişim
gerektirdiği ancak bu erişime sahip olmadığınız durumdur. Bazı
yapılandırma yönergeleri yalnızca sunucu yapılandırma dosyasında
kullanılabilir. Bu nedenle, yalnızca .htaccess dosyalarıyla
çalışabileceğiniz bir barındırma ortamındaysanız,
mod_rewrite kullanmanız gerekebilir.
Basit Yönlendirme
URL Takma Adlandırma
Sanal Konak Oluşturma
Basit Vekil Kullanımı
Ortam Değişkeni Sınamasımod_alias, bir URL'yi başka birine yönlendirme
aracı sağlayan Redirect ve
RedirectMatch yönergelerini
sunar. Bir URL'nin veya bir URL sınıfının başka bir yere bu tür basit
yönlendirmesi, RewriteRule
yerine bu yönergeler kullanılarak gerçekleştirilmelidir.
RedirectMatch, yönlendirme kriterlerinize düzenli ifade
eklemenize olanak tanır ve RewriteRule kullanmanın
avantajlarının birçoğunu sağlar.
RewriteRule için yaygın bir kullanım, URL'lerin tüm bir
sınıfını yönlendirmektir. Örneğin, /one dizinindeki tüm
URL'ler http://one.example.com/ adresine yönlendirilmeli
veya belki tüm http istekleri https'ye
yönlendirilmelidir.
Bu durumlar Redirect yönergesiyle daha iyi ele alınır.
Redirect yönergesinin yol bilgisini koruduğunu
unutmayın. Yani, /one URL'si için bir yönlendirme,
/one/two.html ve /one/three/four.html
gibi altındaki tüm URL'leri de yönlendirecektir.
/one altındaki URL'leri
http://one.example.com adresine yönlendirmek için
şunları yapın:
Redirect "/one/" "http://one.example.com/"
Bir konak adını başka birine yönlendirmek için, örneğin
example.com'u www.example.com'a yönlendirmek
için Kurallı Konak Adları
tarifine bakın.
http URL'lerini https'ye yönlendirmek
için şunları yapın:
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL yapılandırması burada yer alır
</VirtualHost>
RewriteRule kullanarak bu görevi gerçekleştirmek, aynı
kapsamda başka RewriteRule yönergeleri varsa uygun
olabilir. Çünkü aynı kapsamda Redirect ve
RewriteRule yönergeleri olduğunda,
RewriteRule yönergeleri yapılandırma dosyasındaki sıraya
bakılmaksızın önce çalışacaktır.
http-to-https yönlendirmesi durumunda, ana sunucu
yapılandırma dosyasına erişiminiz yoksa ve bu görevi bunun yerine bir
.htaccess dosyasında gerçekleştirmek zorundaysanız,
RewriteRule kullanımı uygun olacaktır.
Alias yönergesi, bir
URI'den bir dizine - genellikle DocumentRoot dışındaki bir dizine - eşleme
sağlar. Bu eşlemeyi mod_rewrite ile gerçekleştirmek
mümkün olsa da, basitlik ve performans nedeniyle Alias tercih edilen yöntemdir.
Alias "/cats" "/var/www/virtualhosts/felines/htdocs"
Bu eşlemeyi gerçekleştirmek için mod_rewrite
kullanımı, sunucu yapılandırma dosyalarına erişiminiz olmadığında
uygun olabilir. Alias yalnızca sunucu veya sanal konak bağlamında
kullanılabilir, .htaccess dosyasında kullanılamaz.
Sunucunuzda Options FollowSymLinks etkinse, sembolik
bağlantılar aynı şeyi gerçekleştirmenin başka bir yolu olabilir.
mod_rewrite ile sanal konakları yönetmek
mümkün olsa da, nadiren doğru yoldur. Ayrı ayrı <VirtualHost> blokları
oluşturmak neredeyse her zaman doğru yaklaşımdır. Çok sayıda sanal
konağınız olması durumunda, bu konakları otomatik olarak oluşturmak
için mod_vhost_alias kullanmayı düşünün.
mod_macro gibi modüller de çok sayıda sanal konağı
devingen olarak oluşturmak için yararlıdır.
Sanal konak oluşturma için mod_rewrite kullanımı,
sunucu yapılandırma dosyalarına erişim sağlamayan bir barındırma
hizmeti kullanıyorsanız ve yapılandırmayı .htaccess
dosyaları kullanarak yapmak zorundaysanız uygun olabilir.
Yine de doğru yaklaşım gibi görünüyorsa, bunu nasıl gerçekleştirebileceğiniz hakkında daha fazla ayrıntı için mod_rewrite ile sanal konaklar belgesine bakın.
RewriteRule, yeniden
yazılmış URI'leri mod_proxy üzerinden geçirmek için
[P] bayrağını sağlar.
RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]
Ancak birçok durumda, yukarıdaki örnekte gösterildiği gibi gerçek
bir kalıp eşleştirmesine gerek olmadığında, ProxyPass yönergesi daha iyi bir
seçimdir. Buradaki örnek şöyle ifade edilebilir:
ProxyPass "/images/" "http://imageserver.local/images/"
İster RewriteRule
ister ProxyPass kullanın,
arka uç sunucu tarafından verilen yönlendirmeleri yakalamak için yine de
ProxyPassReverse yönergesini
kullanmanız gerekeceğini unutmayın:
ProxyPassReverse "/images/" "http://imageserver.local/images/"
Aynı kapsamda diğer RewriteRule'lar etkinse,
RewriteRule kullanmanız gerekebilir; çünkü
RewriteRule genellikle ProxyPass'tan önce
etki eder ve yapmaya çalıştığınız şeyi geçersiz kılabilir.
mod_rewrite, belirli bir ortam değişkeninin veya
istek başlığının varlığına veya yokluğuna bağlı olarak belirli bir
eylem yapmak için sıklıkla kullanılır. Bu, <If> yönergesi kullanılarak daha verimli bir
şekilde yapılabilir.
Örneğin, RewriteRule kullanılarak
www.example.com gibi kurallı bir konak adının
zorlanmasının yaygın senaryosunu ele alalım. Bu, burada gösterildiği
gibi <If>
yönergesi kullanılarak yapılabilir:
<If "req('Host') != 'www.example.com'">
Redirect "/" "http://www.example.com/"
</If>
Bu teknik, herhangi bir istek başlığına, yanıt başlığına veya ortam
değişkenine dayalı eylemler yapmak için kullanılabilir ve birçok yaygın
senaryoda mod_rewrite yerine geçer.
Özellikle <If>
bölümlerinde ve belirli diğer yönergelerde kullanabileceğiniz ifade
türlerine genel bir bakış için ifade
değerlendirme belgelerine bakın.