131 votes

Supprimer l'extension .php avec .htaccess

Oui, j'ai lu le manuel Apache et j'ai fait des recherches ici. Pour une raison que j'ignore, je ne parviens pas à faire fonctionner ce système. J'ai réussi à supprimer l'extension, mais elle pointe à nouveau vers le répertoire racine. Je veux que cela fonctionne uniquement dans le répertoire qui contient l'extension .htaccess fichier.

Je dois faire trois choses avec le .htaccess fichier.

  1. J'en ai besoin pour retirer le .php

a. J'ai plusieurs pages qui utilisent des onglets et la fonction URL ressemble à page.php#tab - est-ce possible ?

b. J'ai une page qui utilise un identifiant de session ajouté à l'URL pour s'assurer que vous venez du bon endroit, www.domain.example/download-software.php?abcdefg .

Est-ce possible ? En outre, en faisant cela, dois-je supprimer .php à partir des liens dans mon fichier d'inclusion de l'en-tête nav ? Si c'est le cas IE "<a href="support.php">support</a>" be <a href="support">support</a>?

  1. Je voudrais qu'il force www avant chaque URL, de sorte que ce n'est pas domain.example mais www.domain.example/page .
  2. J'aimerais supprimer toutes les barres obliques de fin de page.

Je continuerai à chercher, à essayer, etc. Le fait d'être dans un sous-répertoire peut-il poser des problèmes ?

147voto

Pekka 웃 Points 249607

Réponse de Gumbo à la question de Stack Overflow Comment cacher l'extension .html avec Apache mod_rewrite devrait fonctionner correctement.

Re 1) Changer le .html en .php

Re a.) Oui, c'est possible, il suffit d'ajouter #tab à l'URL.

Re b.) C'est possible en utilisant QSA (Query String Append), voir ci-dessous.

Este devrait fonctionnent également dans un chemin de sous-répertoire :

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

64voto

starkeen Points 29161

En plus des autres réponses ci-dessus,

Vous pouvez également essayer ceci pour supprimer .php les extensions complètement de votre fichier et d'éviter boucle infinie :

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

Ce code fonctionnera dans Root/.htaccess, Veillez à modifier le RewriteBase si vous souhaitez le placer dans un fichier htaccess dans un sous-répertoire.

Sur Apache 2.4 et les versions ultérieures, vous pouvez également utiliser le drapeau END pour éviter les erreurs de boucle infinie. L'exemple suivant fonctionne de la même manière que le précédent sur Apache 2.4,

RewriteEngine on

RewriteRule ^(.+)\.php$ /$1 [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,END]

26voto

user1079877 Points 703

Le code suivant fonctionne bien pour moi :

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

15voto

Rodney Salcedo Points 1170

Après avoir modifié le paramètre AllowOverride de None a All en /etc/apache2/apache2.conf (Debian 8), à la suite de este Le fichier .htaccess doit contenir :

Options +MultiViews
AddHandler php5-script php
AddType text/html php

Et c'était suffisant pour cacher l'extension .php des fichiers

15voto

Nadeem Points 189

J'ai obtenu le code de travail suivant :

RewriteEngine on 
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X