J'aimerais faire une réécriture d'URL (Pourquoi? Voir cette question .) Afin qu'au lieu que les utilisateurs voient des adresses comme
labouseur.com/course-compilers.html
ils peuvent plutôt voir et utiliser simplement
labouseur.com/course-compilers
(Encore mieux, je devrais peut-être restructurer cela pour que ce soit des cours/des compilateurs.)
J'utilise un service d'hébergement partagé basé sur Linux pour mon site Web. Je n'ai donc pas le contrôle administratif du serveur, mais j'ai le contrôle sur .htaccess. Les références que j'ai lues en ligne ne me paraissaient pas très claires, alors je cherche un peu de clarté et de conseil ici.
Vous pouvez réellement supprimer le fichier .html des fichiers sur votre serveur et définir les paramètres dans htaccess pour qu'ils soient servis sous forme de fichiers html, mais ce n'est probablement pas ce que vous recherchez.
Faire ceci:
RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html
Premièrement, assurez-vous qu'Apache a le module et qu'il est autorisé dans les fichiers .htacces, puis ajoutez:
RewriteEngine on
# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1
Votre exemple nécessiterait
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html
Pour une structure de répertoire à un seul niveau et
RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html
Pour une structure multi-niveaux.
Mais soyez prudent
Si vous avez la structure
/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess
Les règles de réécriture des fichiers enfant .htaccess
seront relatives à leur dossier parent et vous pouvez entrer dans certaines situations de boucle désordonnées réécrire. Assurez-vous d'utiliser RewriteCond
pour les empêcher si vous le pouvez!
En plus des réponses ci-dessus, on peut utiliser
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]
([\w-]+)
Autorise les lettres, les chiffres avec un trait d'union (-).
(.*)
réécrira chaque requête indépendamment de ce qui pourrait impuissant d'autres règles suivantes, entraînant une erreur de serveur interne lors de l'accès.
Vous n'avez pas besoin d'utiliser un fichier .htaccess pour accomplir cela. Structurez simplement vos fichiers en répertoires et, au lieu d'utiliser "labouseur.com/course-compilers.html", nommez simplement le fichier index.html et placez-le dans un répertoire appelé "course-compilers". Ensuite, lorsque vous pointez sur ce répertoire, l'index est servi par défaut mais ne sera pas affiché dans l'URL. Donc, vous pouvez simplement écrire vos liens en tant que "labourseur.com/course-compilers" et tout ira bien.
Aucun .htaccess requis.