2008-08-06 20 views
18

PrettyURL'leri için RewriteRules'e (benim durumumdaki CakePHP) dayanan bir uygulamada, belirli yeniden dizinleri bu yeniden yazımdan hariç tutmak için doğru yönergeleri nasıl kurabilirim? Yani: /appRoot/* için her isteği yeniden yazılıyor Varsayılan olarak.htaccess yönergeleri * belirli URL'leri yeniden yönlendiremez *

/appRoot/.htaccess 
     app/ 
     static/ 

o analiz ediliyor ve ilgili kontrolör eylemleri çağrılan ediliyor app/webroot/index.php tarafından alınmayı. Bu .htaccess bu direktifleri yapılır:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/  [L] 
RewriteRule (.*) app/webroot/$1 [L] 

Şimdi bu tekrar yazılmasını gelen/statik gibi birkaç dizinleri hariç istiyorum. Bu önce Kek RewriteRules ile çalıştı:

RewriteCond $1 ^(static|otherDir).*$ [NC] 
RewriteRule (.*) - [L] 

Şimdiye kadar isteği artık yeniden yazılmış olması çalışır, ama şimdi tüm istekleri, ^(static|otherDir).*$ eşleşmemelidir bile meşru Kek isteklerini atlanır ediliyor.

Bu kuralların çeşitli varyasyonlarını denedim ancak istediğim şekilde çalışmasını sağlayamıyorum.

cevap

6

Ve doğru cevap iiiiis ...

RewriteRule ^(a|bunch|of|old|directories).* - [NC,L] 

# all other requests will be forwarded to Cake 
RewriteRule ^$ app/webroot/ [L] 
RewriteRule (.*) app/webroot/$1 [L] 

kök dizininde index.php dosyası bile yerde bu direktifleri ile başlangıçta çağrıldı neden hala alamadım. Şimdi

'da yer alır ve Cake üzerinden de işlenir. Şimdi bunun yerinde olmasıyla, bunun da işe yarayacağını düşünmekteyim (Mike'ın önerisi, denenmemiş bir versiyonu):

RewriteCond $1  !^(a|bunch|of|old|directories).*$ [NC] 
RewriteRule ^(.*)$ app/webroot/$1 [L] 
1

önceki kurallarından [L] kaldırın:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/     
RewriteRule (.*) app/webroot/$1 

[L] anlamına gelen "Burada yeniden yazma işlemini durdurun ve bir daha yeniden yazma kuralları uygulanmaz."

1

aşağıdaki kurallara koşul geçerli değildir Could ancak olumsuzlama ile olduğu gibi (bunların bazı değişikliklerle, ben .htaccess kuralları hatırlamakta çok iyi değilim, bu yüzden bayraklar yanlış olabilir):

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/ [L] 

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/$1 [L]