directives .htaccess à * pas * redirigent certaines URL

voix
19

Dans une application qui repose en grande partie sur .htaccessRewriteRules pour ses PrettyURLs (CakePHP dans mon cas), comment puis-je configurer correctement des directives visant à 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 par app/webroot/index.phpoù il est en cours d' analyse et les actions du contrôleur correspondant sont invoqués. Cela se fait par ces directives .htaccess:

RewriteBase /appRoot

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

Je veux maintenant exclure quelques répertoires comme statique / de cette ré - écriture. J'ai essayé avec ce avant le gâteau RewriteRules:

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

Il fonctionne dans la mesure que les demandes ne sont plus réécrite, mais maintenant toutes les demandes sont ignorées, même les demandes de gâteau légitimes qui ne devrait pas correspondre ^(static|otherDir).*$.

J'ai essayé plusieurs variantes de ces règles mais ne peut pas faire fonctionner la façon dont je veux.

Créé 06/08/2008 à 09:15
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
6

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é d'abord, même avec ces directives en place. Il est maintenant situé dans

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

et traitées par gâteau ainsi. Avec cela en place maintenant, je suppose que cela aurait fonctionné aussi bien (version légèrement modifiée de la suggestion de Mike, non testé):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
Créé 07/08/2008 à 07:09
source utilisateur

voix
1

Pourriez-vous pas appliquer la condition aux règles suivantes, mais avec la négation, comme dans (avec une certaine variation de celle-ci, je ne suis pas trop bon à se rappeler des règles .htaccess, de sorte que les drapeaux pourraient se tromper):

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

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
Créé 06/08/2008 à 09:26
source utilisateur

voix
1

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

RewriteBase /appRoot

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

[L] signifie « Arrêter le processus de réécriture ici et ne pas appliquer des règles plus ré-écriture. »

Créé 06/08/2008 à 09:19
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more