2 votes

Comment faire pour que mod_rewrite toutes les requêtes vers index.php sauf les fichiers réels mais en excluant un répertoire réel ?

Laissez-moi vous expliquer ma situation :

J'utilise un framework MVC (CodeIgniter), donc chaque requête est réécrite dans mon fichier index.php, qui à son tour l'achemine vers mes classes et fonctions.

Offcours s'il y a des demandes pour des fichiers réels ils ne devraient pas être traités par scripts mais envoyés directement du serveur web au navigateur.

OK, pas de problème, les règles de réécriture suivantes feront exactement cela :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Je voudrais que les demandes concernant un certain dossier (appelons-le "privé") soient toujours traitées par php. La raison pour laquelle je fais cela est que je vérifierais alors si l'utilisateur est authentifié, et si oui, j'enverrais le contenu au navigateur.

  • Y a-t-il des gourous d'Apache dans la maison qui peuvent aider ?
  • Est-ce une solution acceptable à ce problème ?

5voto

Gumbo Points 279147

Essayez cette règle :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond $1 ^private($|/)
RewriteRule ^(.*)$ index.php/$1 [L]

Cela exclura tous les chemins URL qui sont private ou commencer par private/ même s'il s'agit de dossiers ou de fichiers existants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X