2008-08-06 9 views
18

Dans une application qui repose fortement sur .htaccess RewriteRules pour ses PrettyURLs (CakePHP dans mon cas), comment puis-je configurer correctement des directives pour exclure certains répertoires de cette réécriture? C'est:Directives .htaccess pour * pas * rediriger certaines URL

/appRoot/.htaccess 
     app/ 
     static/ 

Par défaut, chaque demande de /appRoot/* est réécrite à prélever par app/webroot/index.php, où il est en cours d'analyse et les actions du contrôleur correspondant sont invoqués. Cela se 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 statique/de cette ré-écriture. J'ai essayé avec ce avant le gâteau RewriteRules:

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

Il travaille dans la mesure que les demandes ne sont plus réécrite, mais maintenant toutes demandes sont sautés, 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 je n'arrive pas à le faire fonctionner comme je le souhaite.

Répondre

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 également géré par Cake. Avec ceci en place maintenant, je suppose que cela aurait aussi bien 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] 
1

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

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. »

1

Pourriez-vous appliquer pas 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 peut-être tort):

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

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