.htaccess arahan untuk *tidak* redirect Url tertentu

Dalam sebuah aplikasi yang sangat bergantung pada .htaccess RewriteRules untuk PrettyURLs (CakePHP dalam kasus saya), bagaimana cara mengatur arahan untuk mengecualikan beberapa direktori dari ini menulis ulang? Yaitu:

/appRoot/.htaccess
         app/
         static/

Secara default setiap permintaan untuk /appRoot/* sedang ditulis ulang untuk dijemput oleh app/webroot/index.php, di mana ia's yang sedang dianalisa dan sesuai controller tindakan yang dipanggil. Hal ini dilakukan dengan perintah ini dalam .htaccess:

RewriteBase /appRoot

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

Sekarang saya ingin mengecualikan beberapa direktori seperti statis/ dari ini menulis ulang. Saya mencoba dengan ini sebelum Kue RewriteRules:

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

Ia bekerja di begitu jauh sehingga permintaan tidak lagi ditulis ulang, tapi sekarang semua permintaan yang dilewati, bahkan sah Kue permintaan yang tidak harus sesuai ^(statis|otherDir).*$.

Saya mencoba beberapa variasi aturan ini tetapi dapat't mendapatkan itu untuk bekerja dengan cara yang saya inginkan.

Larutan

Dan jawaban yang benar 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]

Aku masih don't mendapatkan mengapa index.php file dalam direktori root dipanggil awalnya bahkan dengan petunjuk-petunjuk tersebut di tempat. Sekarang terletak di

/appRoot/app/views/pages/home.ctp

dan ditangani melalui Kue juga. Dengan ini di tempat sekarang, saya kira ini akan bekerja juga (sedikit diubah versi Mike's saran, belum teruji):

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

Menghapus [L] dari aturan sebelumnya:

RewriteBase /appRoot

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

[L] berarti "Berhenti menulis ulang proses di sini dan don't berlaku lagi aturan penulisannya."

Komentar (0)

Mungkin anda tidak menerapkan syarat untuk mengikuti aturan, tetapi dengan negasi, seperti dalam (dengan beberapa variasi darinya, aku'm tidak terlalu baik mengingat .aturan htaccess, sehingga bendera yang mungkin salah):

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

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