Question

Dans une application qui s'appuie fortement sur la .htaccess Les RewriteRules pour son PrettyURLs (CakePHP dans mon cas), comment puis-je configurer correctement les directives pour exclure certains répertoires de cette réécriture?C'est:

/appRoot/.htaccess
         app/
         static/

Par défaut, toutes les demandes de /appRoot/* est en train d'être réécrit pour être ramassé par app/webroot/index.php, où il est en cours d'analyse et contrôleur correspondant actions sont invoquées.Ceci est fait par ces directives dans .htaccess:

RewriteBase /appRoot

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

Je veux maintenant pour exclure un certain nombre de répertoires de type statique/ à partir de cette réécriture.J'ai essayé avec ce avant le Gâteau des RewriteRules:

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

Il fonctionne dans la mesure que les demandes ne sont plus réécrite, mais maintenant tous les demandes sont ignorés, même légitime Gâteau demandes qui ne doit pas correspondre à ^(static|otherDir).*$.

J'ai essayé plusieurs variantes de ces règles, mais ne peut pas le faire fonctionner comme je le souhaite.

Était-ce utile?

La solution

Et la réponse correcte 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 l'index.php fichier dans le répertoire racine a été appelé d'abord, même avec ces directives.Il est maintenant situé dans

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

et manipulés par le biais de Gâteau de ainsi.Cela fait, maintenant, je suppose que ça aurait fonctionné aussi bien (un peu modifié la version de Mike suggestion, non testé):

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

Autres conseils

Pourriez-vous ne pas appliquer la condition les règles suivantes, mais avec la négation, comme dans (avec quelques variations de celle-ci, je ne suis pas trop bon à me souvenir .les règles htaccess, de sorte que les drapeaux peut-être mal):

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

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

Supprimer le [L] de la précédente règles:

RewriteBase /appRoot

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top