web-dev-qa-db-fra.com

Comment supprimer .html de l'URL?

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

De plus, j'ai besoin de rediriger n'importe quelle URL avec .html vers celle qui n'en contient pas. (c'est-à-dire www.example.com/page.html à www.example.com/page).

90
Dave

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, ce qui suit . Htaccess les règles 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>
13
Dave

Je pense qu'une explication de la réponse de Jon serait constructive. Le suivant:

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 continue:

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

Mais qu'est ce que ça veut dire? Il utilise regex (expressions régulières) . Voici un petit quelque chose que j'ai fait plus tôt ... enter image description here

Je pense c'est correct.

REMARQUE: lors du test de votre .htaccess, n'utilisez pas les redirections 301. Utilisez 302 jusqu'à la fin des tests, car le navigateur mettra en cache 301. Voir https://stackoverflow.com/a/9204355/3217306

Mise à jour: Je me suis un peu trompé. . correspond à tous les caractères sauf les nouvelles lignes et inclut donc les espaces. En outre, voici un aide-mémoire regex utile

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

84
binaryfunt

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] 

En ce qui concerne la suppression de .html de l'URL, il vous suffit de créer un lien vers la page sans .html

<a href="http://www.example.com/page">page</a>
70
Jon Skarpeteig

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]
66
Łukasz Habrzyk

Pour supprimer l'extension .html 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, l'extension .php, remplacez simplement html partout par php dans le code ci-dessus.

62
starkeen

Vous devrez également vous assurer que vous avez Options -MultiViews.

Aucune de ces solutions ne fonctionnait 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]
16
Bradley Flood

J'utilise ce fichier .htaccess pour supprimer l'extension .html de mon site Web. Veuillez vérifier qu'il s'agit d'un 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
Anmol
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

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

0
Jarsäter