web-dev-qa-db-fra.com

Comment masquer l'extension .php dans .htaccess

Duplicata possible:
Supprimer l'extension .php avec .htaccess

J'essaie de cacher l'extension de fichier .php mais pour une raison quelconque, je ne peux pas le faire fonctionner. Ma dernière tentative a été la suivante:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>

J'ai essayé de nombreuses variantes de code différentes que j'ai trouvées en ligne mais toujours pas de chance. Le fichier .htaccess est placé dans le répertoire racine.

38
adamhuxtable

Je l'ai utilisé:

RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

voir aussi: cette question

87
ryanve

L'autre option pour utiliser PHP scripts sans extension est

Options +MultiViews

Ou même en suivant simplement dans les répertoires .htaccess:

DefaultType application/x-httpd-php

Ce dernier permet de traiter tous les noms de fichiers sans extension script comme des scripts PHP. Alors que MultiViews oblige le serveur Web à rechercher des alternatives, lorsque seul le nom de base est fourni (il y a un problème de performance avec cela cependant).

14
mario

1) Êtes-vous sûr que le module mod_rewrite est activé? Vérifiez phpinfo()

2) Votre règle ci-dessus suppose que l'URL commence par "dossier". Est-ce correct? Souhaitez-vous vraiment avoir un dossier dans l'URL? Cela correspondrait à une URL comme:

/folder/thing -> /folder/thing.php

Si vous voulez vraiment

/thing -> /folder/thing.php

Vous devez supprimer le dossier de l'expression de correspondance.

J'utilise généralement ceci pour acheminer la demande vers une page sans php (mais la vôtre devrait fonctionner, ce qui m'amène à penser que mod_rewrite n'est peut-être pas activé):

RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]

3) En supposant que vous déclarez vos règles dans un fichier .htaccess, votre installation permet-elle de définir des remplacements d'options (AllowOverride) dans les fichiers .htaccess? Certains hôtes partagés ne le font pas.

Lorsque le serveur trouve un fichier .htaccess (comme spécifié par AccessFileName), il doit savoir quelles directives déclarées dans ce fichier peuvent remplacer les informations d'accès antérieures.

6
typeoneerror