web-dev-qa-db-fra.com

Comment implémenter la réécriture d'URL dans mon fichier .htaccess?

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.

17
Alan

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
13
Rizwan Kassim

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!

3
Aiden Bell

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.

2
Abhishek Gurjar

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.

1
Joel Glovier