142 votes

Comment supprimer .html de l'URL ?

Comment supprimer .html de l'URL d'une page statique ?

Aussi, j'ai besoin de rediriger toutes les URL avec .html vers celles sans. (c'est-à-dire www.example.com/page.html vers www.example.com/page).

2 votes

En supprimant ".html", voulez-vous dire "ne pas exiger que .html soit présent" ?

0 votes

@Tomalak: Oui et également rediriger les URL avec ".html" vers celles sans. Mon problème est que cela entraîne une redirection infinie. Ma configuration actuelle permet à www.example.com/page.html et www.example.com/page d'être tous les deux accessibles, ce qui n'est pas favorable pour le référencement SEO.

74voto

Jon Skarpeteig Points 2430

Avec .htaccess sous apache, vous pouvez effectuer la redirection de cette manière :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

Quant à la suppression de .html de l'URL, il suffit de lier à la page sans .html

page

26 votes

Cela ne fait rien pour moi. Y a-t-il une raison pour laquelle cela ne fonctionnerait pas?

0 votes

Avez-vous un fichier réel pour le lien demandé? Cela déclencherait le !-f

1 votes

@Martijn, je pense que c'est là le point - que vous avez un fichier à /page.html, mais que vous voulez y faire référence avec /page. Je soupçonne que cette réponse a mal compris la question et a supposé que l'auteur posait ses pages sans l'extension .html (ce qui, tel que je le comprends, n'était pas le cas).

74voto

Łukasz Habrzyk Points 161

Cela devrait fonctionner pour vous:

#example.com/page affichera le contenu de example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 de example.com/page.html à example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

3 votes

J'obtenais une erreur 404 dans Godaddy avec ce code et je l'ai corrigée en mettant : Options +FollowSymLinks -MultiViews -Indexes en haut.

1 votes

Je pense que c'est la meilleure et la réponse la plus complète, merci!

0 votes

J'ai essayé de le faire en localhost, mais cela ne fonctionne pas, y a-t-il autre chose que je dois faire, dois-je lier le fichier .htaccess, ou comment la page le reconnaît-elle?

23voto

Bradley Flood Points 652

Vous devrez vous assurer d'avoir également Options -MultiViews.

Aucune des méthodes ci-dessus n'a fonctionné pour moi sur un hébergeur cPanel standard.

Cela a fonctionné :

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

0 votes

Parmi toutes les réponses ci-dessus, celle-ci a enfin fonctionné.. Je pense que c'est parce que mon site est hébergé sur godaddy avec cPanel. La clé est Options -MultiViews.

0 votes

Oui, rien dans cette section ne fonctionne à l'exception de cette réponse! Tu as sauvé la journée!

0 votes

Merci pote. Je ne suis pas sûr pourquoi les autres n'ont pas fonctionné comme prévu.

14voto

Dave Points 699

Merci pour vos réponses. J'ai déjà résolu mon problème. Supposons que j'ai mes pages sous http://www.votresite.com/html, les règles suivantes de .htaccess s'appliquent.

   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]

7voto

Anmol Points 21

J'utilise ce .htacess pour supprimer l'extension .html de l'URL de mon site, veuillez vérifier que ceci est le code correct :

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

0 votes

Cela semblait fonctionner pour moi, contrairement aux autres solutions présentées ici, merci. J'ajouterais cependant que vous devez toujours mettre à jour le(s) lien(s) dans votre HTML (donc si vous reliez initialement à votre fichier .html en tant que , vous devez le mettre à jour en tant que [example.com/page1">> et ensuite cela fonctionnera.](<a href=)

0 votes

La principale modification pour moi a été la partie RewriteBase /. Malheureusement, je ne comprends pas pourquoi cela a fonctionné, mais je suppose que je vais bientôt apprendre.

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