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

mod_rewrite Ne Zaman Kullanılmamalı

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

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.

Ayrıca bakınız:

top

Basit Yönlendirme

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.

top

URL Takma Adlandırma

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 Kullanımı

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.

top

Sanal Konak Oluşturma

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.

top

Basit Vekil Kullanımı

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.

top

Ortam Değişkeni Sınaması

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.

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