Réécrivez toutes les requêtes pour ne pas avoir besoin de l'extension .php en utilisant un mod_rewrite RewriteRule
-
06-07-2019 - |
Question
Je voudrais toutes les requêtes comme
http://mysite.com/something/otherthing?foo=bar&x=y
à réécrire comme
http://mysite.com/something/otherthing.php?foo=bar&x=y
En d'autres termes, il suffit de rendre l'extension .php facultative, universellement.
La solution
Je le ferais de cette façon. Fondamentalement, si le fichier n'existe pas, essayez d'y ajouter .php.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.php [QSA,L]
Autres conseils
Si vous pouvez modifier le fichier httpd.conf et quoi, vous pouvez également indiquer:
ForceType application/x-httpd-php
dans le fichier car cela forcera tous les chemins appelés à être des fichiers PHP. Je pense que cela fonctionne également avec les chaînes de requête.
Ceci fonctionne:
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]
L’idée est de s’assurer qu’il existe une chaîne de requête (point d’interrogation plus substance) et, le cas échéant, de vérifier si le contenu précédant le point d’interrogation n’a pas d’extension et, le cas échéant, d’ajouter .php.
Quelque chose comme ...
RewriteRule /something/(.+)?(.+) /something/$1.php?$2
fonctionnerait probablement.
Ne correspond qu'aux chemins sans extension:
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
Modifier: lors de mes tests, la chaîne de requête est automatiquement transmise. Si ce n'est pas le cas, vous pouvez utiliser ceci à la place:
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1