.htaccess directives *pas* rediriger certaines Url
-
08-06-2019 - |
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.
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."