apache - Directives .htaccess pour * ne pas * rediriger certaines URL

Translate

Dans une application qui repose fortement sur.htaccessRewriteRules pour ses PrettyURLs (CakePHP dans mon cas), comment configurer correctement des directives pour exclure certains répertoires de cette réécriture? C'est:

/appRoot/.htaccess
         app/
         static/

Par défaut, chaque demande à/appRoot/*est en cours de réécriture pour être repris parapp/webroot/index.php, où il est analysé et les actions de contrôleur correspondantes sont appelées. Ceci est fait par ces directives dans.htaccess:

RewriteBase /appRoot

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

Je veux maintenant exclure quelques répertoires comme static / de cette réécriture. J'ai essayé avec çaavantles règles de réécriture du gâteau:

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

Cela fonctionne si loin que les demandes ne sont plus réécrites, mais maintenanttoutles requêtes sont ignorées, même les requêtes Cake légitimes qui ne devraient pas correspondre^(static|otherDir).*$.

J'ai essayé plusieurs variantes de ces règles mais je n'arrive pas à les faire fonctionner comme je le souhaite.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Et la bonne réponse 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]

Je ne comprends toujours pas pourquoi le fichier index.php dans le répertoire racine a été appelé initialement même avec ces directives en place. Il est maintenant situé dans

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

et géré par Cake également. Avec ceci en place maintenant, je suppose que cela aurait également fonctionné (version légèrement modifiée de la suggestion de Mike, non testée):

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

Ne pourriez-vous pas appliquer la condition aux règles suivantes, mais avec la négation, comme dans (avec une variation de celle-ci, je ne suis pas très doué pour me souvenir des règles .htaccess, donc les indicateurs peuvent être faux):

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

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

Supprimez le [L] des règles précédentes:

RewriteBase /appRoot

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

[L] signifie "Arrêtez le processus de réécriture ici et n'appliquez plus de règles de réécriture."

La source