htaccess yürütme sırası ve önceliği


19

Birisi bana apache'nin aynı yolun farklı seviyelerinde bulunan .htaccess dosyalarını hangi sırayla yürüttüğünü ve içindeki yeniden yazma kurallarına nasıl öncelik verildiğini açıklayabilir mi?

Örneğin, aşağıdaki ilk .htaccess'teki yeniden yazma kuralı neden işe yaramıyor ve /blogöncelikli olanı ?

.htaccess in /

RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]

.htaccess in /blog

RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

Not: Sadece bir cevap ama apache / mod_rewrite iç görün anlamak için bir yol aramıyorum ... neden daha benim için daha önemli olduğunu nasıl , bu sorunu gidermek için

Yanıtlar:


20

Sanırım Apache Öğreticisi'ni okumalısınız : .htaccess , özellikle "Yönergeler nasıl uygulanır?"

Bir .htaccess dosyasında bulunan yapılandırma yönergeleri, .htaccess dosyasının bulunduğu dizine ve tüm alt dizinlerine uygulanır. Ancak, dizinlerde daha yüksek .htaccess dosyalarının olabileceğini hatırlamak da önemlidir. Direktifler bulundukları sırayla uygulanır. Bu nedenle, belirli bir dizindeki bir .htaccess dosyası, dizin ağacında daha yukarıda bulunan .htaccess dosyalarında bulunan yönergeleri geçersiz kılabilir. Ve bunlar, daha yukarıda veya ana sunucu yapılandırma dosyasında bulunan geçersiz kılınmış yönergelere sahip olabilir.

Tam bir okuma verin ve .htaccess artık gizem olmayacak.


7
mod_rewrite özel bir durumdur. Yeniden yazma kuralları aşağıdan yukarıya uygulanır. Önce alt dizindeki kurallar, sonra üst dizindeki kurallar.
GetFree

Yukarıda listelenen doküman Apache 2.2 içindir. Apache'nin mevcut sürümü için, bunun yerine httpd.apache.org/docs/current/howto/htaccess.html
SherylHohman

3

RewriteOptions inheritÜst dizinin yeniden yazma kurallarını devralmak için kullanabilirsiniz . Ancak, üst yöneticinin yeniden yazma kuralları , RewriteOptions hakkındaki belgelere göre daha sonra uygulanacaktır .


1
Üst dizinler için yeniden yazma yönergeleri, bu ifade ( hatta biraz kafa karıştırıcı) olmadan da uygulanacaktır , ancak bunun, sanal bir kopyayı + yönergelerin üst öğeden çocuğa yapıştırmasını (farklı yeniden yazma tabanlarına sahip olabileceğini) gerçekleştirmek için kullanılabilir. Mod_rewrite'ın bazen kafanla uğraşmasına şaşmamalı ... Argh.
Simon East

2
@SimonEast "Bu deyim olmadan üst dizinler için yeniden yazma yönergeleri uygulanacak" - Emin misiniz? Referansınız var mı? Özellikle, mod_rewritedirektifler vardır değil (diğer modüllere farklı) varsayılan olarak miras. Bir gerekir RewriteOptions InheritXXXXyönerge bir yere direktifleri devralınacak için. Ancak, bu InheritDown, üst dizinlerde ve daha sonra alt dizinleri kontrol eden sunucu yapılandırmasında belirtilebilen seçenekle Apache 2.4+ üzerinde daha karmaşık hale gelir .
MrWhite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.