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).
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>
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...
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
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]
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.
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]
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>
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]
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Essayez ceci :) Je ne sais pas si cela fonctionne.