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