Bazı RewriteCond çoklu kurallarını etkiler mi

3 Cevap php

Ben çeşitli yerlerinde parse request URLs by themselves bir web sitesi var ve bazı yapmak değil (örneğin, bir vBulletin forum). . Ben bütçesidir komut istekleri göndermek zorunda htaccess olduğunu:

# wiki, shop, admin
RewriteCond% {} REQUEST_FILENAME!-F
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(.*)\.js
RewriteRule ^wiki/(.*)$ w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ wiki/ [L,QSA]
RewriteRule ^shop/ /shop/shop.php [NC,L]
RewriteRule ^forum/admincp/pkr/ /forum/admincp/pkr/pkr.php [NC,L]

Beklediğim gibi bu çalışmıyor. Ben yeniden yazma koşullar sadece onları izler ilk kural uygulanır olduğunu unuttum. Soru onları 4 kez CopyPaste zorunda kalmadan tüm bu kurallara How can I apply those RewriteCond itions nedir?


Ne yanlış giderse şudur:

  • / Shop / örneği / shop / shop.php için yeniden yazılırsa
  • / Shop / shop.php sonra / shop / shop.php (: sonsuz bir döngü var okuyun) tekrar yeniden yazılıyor. Bu, bu durum bu yeniden yazma kuralı uygulanmış olsaydı / shop / shop.php gerçek bir dosya olduğu için, olur olmaz:

    RewriteCond% {} REQUEST_FILENAME!-F

Yani evet ...

3 Cevap

Ifadesini ters çevirin ve bir kırılma kural ekleyebilirsiniz:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} (.*)\.js
RewriteRule ^ - [L]

Ben bu yüzden burada Gumbo cevabını anlamadı ben ne işe yaradığını buldum budur:

Bunun yerine something uyan ve bu testi birden fazla RewriteRule yürütme, sen (imzala! Örneğin kullanarak gibi) maç kuralı ters olabilir ve bunu bulamazsa, atlayın kurallar geçmiş X sayısı. Gibi:

RewriteCond %{HTTP_HOST} !^www.mydomain.com [NC]
RewriteRule . - [S=2] # Skip the below X lines if the above test passes
RewriteRule ^/images/(.*) /resources/images/$1 [L]
RewriteRule ^/favicon.ico /resources/favicon.ico [L]

HTTP_HOST www.mydomain.com ile başlar Yani ben son iki RewriteRules işlenecek istiyorum. HTTP_HOST not, www.mydomain.com ile başlayan önümüzdeki iki kuralları atlamak Ama eğer ne yapıyorum olduğunu. İlk RewriteRule: . - [S=2] aslında hiçbir şeyi değiştirmez, ancak S = 2 bayrak vasıta sonraki X = 2 kurallarını atlamıyor.

Ters mantık Biraz bana sorarsanız.

veya Tıpkı başka bir koşul yapmak

RewriteCond %{THE_REQUEST} !shop.php

hatta daha iyisi

RewriteCond %{THE_REQUEST} !(.*)\.php