J’utilise WAMP Server, principalement configuré tel quel. J’ai du mal à faire en sorte que mod_rewrite se comporte comme prévu localement (tout fonctionne correctement sur un serveur de production).
J’ai un fichier PHP situé à: /ajax/graphs/get-graph.php
La manière dont ce fichier est normalement appelé est via un fichier bootstrap chargé par /index.php
J’ai un fichier .htaccess à la racine avec les règles suivantes:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php [L]
Donc, fondamentalement, lorsque mon application demande via AJAX un appel à /ajax/graphs/get-graph/
il devrait être dirigé vers /index.php
.
Le problème est que Apache / mod_rewrite voit le chemin de la requête et charge directement /ajax/graphs/get-graph.php
.
Comment puis-je empêcher Apache de supposer que /ajax/graphs/get-graph/
est un fichier valide car un fichier php du même nom existe à cet emplacement?
On dirait que vous êtes tombé dans le piège de la négociation de contenu 😉 Comme expliqué dans la documentation Apache , il existe une option appelée MultiViews
qui, une fois activée, amène Apache à convertir les noms de répertoires inexistants en noms de fichiers correspondants.
L’effet de MultiViews est le suivant: si le serveur reçoit une requête pour
/some/dir/foo
, si/some/dir
a activé MultiViews et/some/dir/foo
n’existe pas, le serveur lit le répertoire à la recherche de fichiers nommésfoo.*
, et falsifie efficacement une carte de type qui nomme tous ces fichiers …
L’intention est que vous pouvez avoir plusieurs versions d’un fichier dans différents formats ou langues, comme
/some/dir - foo.en.gif - foo.en.png - foo.en.jpg - foo.fr.gif - foo.fr.png - foo.fr.jpg
et Apache choisira la meilleure en fonction des préférences fournies par le navigateur.
Pour y remédier, il vous suffit d’append la directive
Options -MultiViews
dans un bloc
ou
correspondant à /ajax/graphs
. Ou, si vous n’avez pas access à la configuration du serveur principal, vous pouvez la placer dans /ajax/graphs/.htaccess
.