Coucou les agrumes,
J’essaie de configurer mon serveur Apache pour que les requêtes de CSS/JS ou d’images ne soient pas redirigées vers mon contrôleur central, mais qu’elles accèdent directement au fichier voulu (ces fichiers ont une URI qui commence par /resources, et sont tous placés dans le dossier View/resources).
J’ai une solution qui marche, à savoir
1 2 3 4 | RewriteRule ^resources/(.*)$ View/resources/$1 RewriteRule View/resources/ - [L] RewriteRule . app.php [QSA,L] |
Mais je voulais savoir pourquoi ma config à base de RewriteCond ne marchait pas. J’ai tenté
1 2 3 4 5 | RewriteRule ^resources/(.*)$ View/resources/$1 # Exclude resources from redirection to app.php RewriteCond %{REQUEST_URI} !^View/resources/ RewriteRule . app.php [QSA,L] |
Mais ça ne marche pas, ni quand je place la RewriteCond
sur !^resources
. En revanche, en changeant la dernière ligne pour RewriteRule !^View/resources/ app.php
(et en enlevant, ou pas, la RewriteCond), ça marche nickel…
Du coup, ben je comprends pas.
Avec la seconde config donnée, d’après moi Apache devrait fontionner de la manière suivante : il reçoit un GET /resources/css/design.css
, qu’il réécrit en GET /View/resources/css/design.css
, puis après avoir parsé RewriteRule . app.php [QSA,L]
s’aperçoit que la RewriteCond
ne correspond pas, puisque l’URI a été changée en View/resources/css/design.css
. Apache fait ensuite potentiellement une seconde passe du fichier (pas sûr de moi sur ce coup-là), pour vérifier qu’il n’y a pas de nouvelle règle qui s’applique à l’URI précédemment changée. Puis il trouve le fichier View/resources/css/design.css
, qu’il délivre au client.
Sauf que ça atterrit sur le contrôleur quand même.
Des idées ?