2008-10-08 5 views

Répondre

6

Je le ferais de cette façon. Fondamentalement, si le fichier n'existe pas, essayez d'ajouter .php.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ $1.php [QSA,L] 
+0

C'est ce que je fais maintenant. Parfait. Merci! – dreeves

+0

Donc, cela dit qu'il va effectuer la RewriteRule si la ressource accédée n'est pas un fichier ou un répertoire? – bafromca

0

Quelque chose comme ...

RewriteRule /something/(.+)?(.+) /something/$1.php?$2 

fonctionnerait probablement.

+0

Cela ne semble pas fonctionner. – dreeves

+0

Vous avez probablement besoin d'échapper à la marque d'interrogation avec une barre oblique inverse –

+0

J'ai essayé cela. Je pense que la chaîne de requête ne fait simplement pas partie de ce qui correspond à une RewriteRule. Vous devez faire une RewriteCond distincte sur la chaîne de requête. Vois ma réponse. – dreeves

1

Cela fonctionne:

RewriteCond %{QUERY_STRING} ^.+$ 
RewriteRule ^/?([^/\.]+)$ /$1.php [L] 

L'idée est de vous assurer qu'il ya une chaîne de requête (point d'interrogation ainsi que des choses) et si oui, vérifier si la substance avant la marque de question n'a pas d'extension et si oui, append. php.

1

Si vous pouvez modifier le httpd.conf et ce qu'il faut, vous pouvez aussi mettre:

ForceType application/x-httpd-php 

dans le fichier tel qu'il forcera tous les chemins appelés à être des fichiers PHP. Je pense que cela fonctionne également avec les chaînes de requête.

0

Matches seulement des chemins sans extension:

RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php 

Edit: Dans mes tests, la chaîne de requête est transmis automatiquement. Si ce n'est pas le cas, vous pouvez l'utiliser à la place:

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1 
+0

'[QSA, L]' passe la chaîne de requête ('L' signifie ne pas traiter les règles après celle-ci). – NateS

Questions connexes