Comment supprimer .htmlde l'URL d'une page statique?
De plus, j'ai besoin de rediriger n'importe quelle URL avec .htmlvers celle qui n'en a pas. (c'est- www.example.com/page.htmlà- dire à www.example.com/page).
Par "supprimer .html", voulez-vous dire "ne pas exiger que le .html soit présent"?
Courses de légèreté en orbite le
@Tomalak: Oui et redirige également 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 convivial pour le référencement.
vérifie que si le fichier ou le répertoire spécifié n'existe pas respectivement, la règle de réécriture se poursuit:
RewriteRule^(.*)\.html$ /$1 [L,R=301]
Mais qu'est ce que ça veut dire? Il utilise des regex (expressions régulières) . Voici un petit quelque chose que j'ai fait plus tôt ...
Je pense que c'est correct.
REMARQUE: lors du test, .htaccessn'utilisez pas les redirections 301. Utilisez 302 jusqu'à la fin du test, car le navigateur mettra 301 en cache. Voir https://stackoverflow.com/a/9204355/3217306
Superbe diagramme pour aider à expliquer la réponse.
Ric
Le conseil sur les 301 et le cache du navigateur est ce qui a résolu mes problèmes.
bgfvdu3w
@KnocksX Je ne suis plus un webmaster et je ne suis pas en mesure de pouvoir aider
binaryfunt
84
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 pour supprimer l'extension .php, remplacez simplement le html partout par php dans le code ci-dessus.
Cela ne fait rien pour moi. Y a-t-il une raison pour laquelle cela ne fonctionnerait pas?
Michael Yaworski
Avez-vous un fichier réel pour le lien demandé? Cela déclencherait le!-f
Martijn
72
Cela devrait fonctionner pour vous:
#example.com/page will display the contents of example.com/page.htmlRewriteCond%{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/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
J'avais un 404 dans Godaddy avec ce code et je l'ai corrigé en mettant: Options + FollowSymLinks -MultiViews -Indexes tout en haut.
Labanino
1
Je pense que c'est la meilleure et la plus complète réponse, merci!
ctekk
J'ai essayé de le faire dans localhost, mais cela ne fonctionne pas, y a-t-il autre chose à faire, dois-je lier le fichier .htaccess ou comment la page le reconnaît-elle?
Pianistprogrammer
Comment puis-je ajouter l'extension .php à # 301 depuis example.com/page.html vers example.com/page, est-ce possible?
20
Vous devrez vous assurer que vous l'avez Options -MultiViewségalement.
Rien de ce qui précède n'a fonctionné pour moi sur un hôte cPanel standard.
Sur toutes les réponses ci-dessus, celle-ci a finalement fonctionné .. Je crois que mon site est hébergé sur godaddy avec cPanel. La clé est Options -MultiViews
Brad Vanderbush
Oui, rien dans cette section ne fonctionne, attendez-vous à cette réponse! Vous avez sauvé la journée!
Neil Bannet
Merci mon pote. Je ne sais pas pourquoi les autres n'ont pas fonctionné comme prévu.
Nanoo
13
Merci pour vos réponses. J'ai déjà résolu mon problème. Supposons que mes pages soient sous http://www.votresite.com/html , les règles .htaccess suivantes s'appliquent.
Cela a semblé 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 créez à l'origine un lien vers votre fichier .html en tant que <a href="page1.html"> </a>, vous devez mettre à jour comme <a href=" example.com/page1"> </ a > et ensuite cela fonctionnera.)
Lorenzo
Le changement fondamental pour moi était le RewriteBase /peu. Malheureusement, je ne comprends pas pourquoi cela a fonctionné, mais je suppose que je l'apprendrai bientôt.
Keno Clayton
4
Pour ceux qui utilisent l'hébergement Firebase, aucune des réponses ne fonctionnera sur cette page. Parce que vous ne pouvez pas utiliser .htaccessdans l'hébergement Firebase. Vous devrez configurer le fichier firebase.json. Ajoutez simplement la ligne"cleanUrls": true dans votre fichier et enregistrez-le. C'est tout.
Après avoir ajouté la ligne firebase.json ressemblera à ceci:
Pour supprimer l'extension .html de vos URL, vous pouvez utiliser le code suivant dans root / htaccess:
#mode_rerwrite start hereRewriteEngineOn# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.RewriteCond%{REQUEST_FILENAME}!-d
#Check for file in directory with .html extension RewriteCond%{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extensionRewriteRule^(.*)$ $1.html [NC,L]
Réponses:
Je pense qu'une explication de la réponse de Jon serait constructive. Le suivant:
vérifie que si le fichier ou le répertoire spécifié n'existe pas respectivement, la règle de réécriture se poursuit:
Mais qu'est ce que ça veut dire? Il utilise des regex (expressions régulières) . Voici un petit quelque chose que j'ai fait plus tôt ...
Je pense que c'est correct.
REMARQUE: lors du test,
.htaccess
n'utilisez pas les redirections 301. Utilisez 302 jusqu'à la fin du test, car le navigateur mettra 301 en cache. Voir https://stackoverflow.com/a/9204355/3217306Mettre à jour: je me suis légèrement trompé,
.
correspond à tous les caractères sauf les retours à la ligne, donc inclut les espaces. Aussi, voici une feuille de triche utile pour les regexSources:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
la source
Pour supprimer l'extension .html de vos URL, vous pouvez utiliser le code suivant dans root / htaccess:
REMARQUE: Si vous souhaitez supprimer une autre extension, par exemple pour supprimer l'extension .php, remplacez simplement le html partout par php dans le code ci-dessus.
la source
Avec .htaccess sous apache, vous pouvez faire la redirection comme ceci:
Quant à la suppression du .html de l'url, il suffit de créer un lien vers la page sans .html
la source
!-f
Cela devrait fonctionner pour vous:
la source
Vous devrez vous assurer que vous l'avez
Options -MultiViews
également.Rien de ce qui précède n'a fonctionné pour moi sur un hôte cPanel standard.
Cela a fonctionné:
la source
Merci pour vos réponses. J'ai déjà résolu mon problème. Supposons que mes pages soient sous http://www.votresite.com/html , les règles .htaccess suivantes s'appliquent.
la source
J'utilise ce .htacess pour supprimer l'extantion .html de mon site URL, veuillez vérifier que le code est correct:
la source
RewriteBase /
peu. Malheureusement, je ne comprends pas pourquoi cela a fonctionné, mais je suppose que je l'apprendrai bientôt.Pour ceux qui utilisent l'hébergement Firebase, aucune des réponses ne fonctionnera sur cette page. Parce que vous ne pouvez pas utiliser
.htaccess
dans l'hébergement Firebase. Vous devrez configurer le fichier firebase.json. Ajoutez simplement la ligne"cleanUrls": true
dans votre fichier et enregistrez-le. C'est tout.Après avoir ajouté la ligne firebase.json ressemblera à ceci:
la source
Pour supprimer l'extension .html de vos URL, vous pouvez utiliser le code suivant dans root / htaccess:
Merci
la source
Essayez ceci :) je ne sais pas si cela fonctionne.
la source