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 a pas. (c'est- www.example.com/page.html
à- dire à www.example.com/page
).
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 a pas. (c'est- www.example.com/page.html
à- dire à www.example.com/page
).
Réponses:
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 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, .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/3217306
Mettre à 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 regex
Sources:
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
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.
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]
Quant à la suppression du .html de l'url, il suffit de créer un lien vers la page sans .html
<a href="http://www.example.com/page">page</a>
!-f
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]
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é:
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 mes pages soient sous http://www.votresite.com/html , les règles .htaccess suivantes 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 ce .htacess pour supprimer l'extantion .html de mon site URL, veuillez vérifier que le code est 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]
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:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Pour supprimer l'extension .html de vos URL, vous pouvez utiliser le code suivant dans root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# 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 extension
RewriteRule ^(.*)$ $1.html [NC,L]
Merci
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Essayez ceci :) je ne sais pas si cela fonctionne.