Comment faire pour supprimer.html à partir de l'URL?

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

En outre, j'ai besoin de rediriger n'importe quelle url avec .html à celui sans elle. (i.e. www.example.com/page.html pour www.example.com/page).

78
demandé sur Gaurang Tandon 2011-04-20 16:16:33

8 réponses

Avec .htaccess sous apache, vous pouvez faire la redirection comme ceci:

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

Comme pour la suppression de .html de l'url, il suffit de lier à la page sans .html

<a href="http://www.example.com/page">page</a>
66
répondu Jon Skarpeteig 2012-11-27 10:03:36

Je pense qu'une explication de la réponse de Jon serait constructive. Ce qui suit:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Vérifie que si le fichier ou le répertoire spécifié n'existe pas, la règle de réécriture se poursuit:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

Mais qu'est-ce que cela signifie? Il utilise regex (expressions régulières). Voici un petit quelque chose que j'ai fait plus tôt... entrez la description de l'image ici

Je pense que c'est correct.

NOTE: lors du test de votre .htaccess ne pas utiliser 301 redirections. Utiliser 302 jusqu'à la fin du test, car le navigateur mettra en cache 301s. voir https://stackoverflow.com/a/9204355/3217306

Mise à jour: je me suis légèrement trompé, . correspond à tous les caractères sauf les sauts de ligne, donc inclut les espaces. En outre, voici une triche regex utile feuille de

Sources:

Http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-f-d/2034/2

Https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

65
répondu binaryfunt 2017-05-23 12:03:09

Cela devrait fonctionner pour vous:

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
59
répondu Łukasz Habrzyk 2012-08-05 00:38:39

Pour supprimer le .extension html a partir de vos URL, vous pouvez utiliser le code suivant dans root / htaccess:

RewriteEngine on


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

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

Remarque: Si vous souhaitez supprimer une autre extension, par exemple pour supprimer le .extension php, il suffit de remplacer les html partout avec php le code ci-dessus.

43
répondu starkeen 2016-01-11 16:20:45

Vous devez vous assurer que vous avez Options -MultiViews ainsi.

Aucun de ce qui précède n'a fonctionné pour moi sur un hôte cPanel standard.

Cela a fonctionné:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
13
répondu Bradley Flood 2014-06-29 12:05:38

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

<IfModule mod_rewrite.c>
   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]
</IfModule>
12
répondu Dave 2013-09-30 08:24:41

J'utilise ceci .htacess pour enlever .extantion html de mon site url, veuillez vérifier que c'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]
6
répondu Anmol 2012-06-25 12:04:10
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

Essayez ceci :) Je ne sais pas si cela fonctionne.

0
répondu Jarsäter 2011-04-20 12:27:29