Mod_rewrite Introduction and Cheat Sheet – Référence rapide

Divulgation: Votre soutien aide à maintenir le site en marche! Nous gagnons des frais de référence pour certains des services que nous recommandons sur cette page.


mod_rewrite fait partie du logiciel de serveur Web Apache qui s’exécute sur l’ordinateur de votre hôte Web. Il permet à une URL d’être dynamiquement modifiée ou «réécrite».

Vous verrez mod_rewrite en action si vous utilisez WordPress avec de “jolis” permaliens activés. Par défaut, toutes les pages WordPress sont chargées à l’aide d’une URL qui contient un numéro d’identification et éventuellement d’autres variables qui indiquent à WordPress quoi charger. Mais lorsque de jolis permaliens sont activés, les règles mod_rewrite transforment ces variables laides en mots. Nous appelons parfois les URL résultantes «propres».

La réécriture avec mod_rewrite est essentiellement un processus de traduction à la volée d’une URL d’une sale en une propre. Le visiteur ne voit jamais le changement d’URL dans la barre d’adresse, car le traitement est géré par Apache avant que quoi que ce soit ne soit envoyé au navigateur du visiteur.

Il est parfaitement possible d’exécuter un site Web sans utiliser mod_rewrite ou nettoyer les URL. Mais voici pourquoi la plupart des gens l’utilisent:

  • Pour faciliter la lecture des URL. Les «jolies» URL sont plus mémorables, plus faciles à taper et plus faciles à lire à haute voix.
  • Pour rendre les URL plus faciles à interpréter pour les moteurs de recherche. Une jolie URL indique au moteur de recherche de quoi parle la page, mais pas un mélange de numéros d’identification et de variables. Les moteurs de recherche adorent la sémantique, donc la réécriture de l’URL permet de s’assurer que la page est classée et indexée correctement.
  • Pour créer temporairement des redirections à partir d’un fichier ou d’un chemin vers un autre.

Composition des règles Mod_rewrite

Si vous utilisez Apache, vous devez demander à votre hébergeur d’activer mod_rewrite dans le fichier http.conf de votre compte. Dans de nombreux cas, mod_rewrite est activé par défaut.

Ensuite, vous devrez créer un fichier .htaccess dans le répertoire racine de votre compte d’hébergement. Le fichier .htaccess contrôle le répertoire racine et tous les fichiers en dessous, à moins que vous ne le remplaciez par un autre fichier .htaccess plus bas dans l’arborescence des dossiers. Si vous avez déjà un fichier .htaccess, faites une copie de sauvegarde avant de continuer.

Les règles de réécriture comportent deux parties. La première ligne active la directive du moteur de réécriture dans Apache. (La ligne commençant par # est un commentaire, qui est ignoré.) La deuxième partie de l’instruction mod_rewrite indique au moteur de réécriture comment l’URL doit être transformée. Nous indiquons donc la condition, puis nous disons à Apache quoi faire. Voici un exemple de règle qui redirige le visiteur d’un fichier vers un autre.

# Activer la réécriture
RewriteEngine sur
# Transformez oldname.html en newname.html
RewriteRule ^ oldname.html $ newname.html

Cette règle recherche un fichier appelé oldname.html (la condition). S’il trouve une correspondance, il le remplace dynamiquement par newname.html. L’utilisateur final voit le contenu de oldname.html, mais voit newname.html dans la barre d’URL de son navigateur. Si mod_rewrite ne correspondait pas à oldname.html, la règle serait ignorée.

Recherche de motifs

La création d’une règle pour chaque URL prendrait beaucoup de temps, nous devons donc utiliser des expressions régulières. Les expressions régulières recherchent des modèles et remplacent un morceau de chaîne par un autre. Prenez cet exemple:

# Activer la réécriture
RewriteEngine sur
# Transformez author / NAME / en author.php? Id = NAME
RewriteRule ^ author / ([a-z] +) /? $ Author.php? Id = $ 1 [L]

Voici comment fonctionne la condition ^ author / ([a-z] +) /? $:

  • ^ est le début de la règle
  • author / est la chaîne que nous recherchons dans l’URL d’origine
  • ([a-z] +) est un caractère générique – il recherche les mots qui apparaissent après l’auteur /
  • /? ajoute la barre oblique à la fin de l’URL
  • $ marque la fin de la condition.

Et voici comment l’action author.php? Id = $ 1 fonctionne:

  • author.php? id = est la chaîne que nous voulons écrire
  • $ 1 est un espace réservé pour les mots que nous avons trouvés dans la condition ci-dessus.

À la fin de la règle, [L] est un indicateur qui indique à Apache d’arrêter d’appliquer d’autres règles si celle-ci est traitée.

Ceci est juste un exemple très basique de ce que peut faire mod_rewrite. Au lieu d’écrire [a-z], nous pourrions utiliser [xyz] pour trouver les lettres x, y ou z, ou (y | n) pour trouver y ou n. Vous pouvez trouver des références plus complètes à la syntaxe des expressions régulières dans les ressources ci-dessous.

RewriteRule Flags

Dans l’exemple ci-dessus, nous avons ajouté un indicateur, [L], à la fin de la règle. Les drapeaux sont facultatifs. Ils doivent être inclus dans un seul jeu de crochets à la fin de la ligne, et si vous souhaitez utiliser plusieurs drapeaux, vous devez placer des virgules entre eux.

Les drapeaux peuvent être écrits en entier ou en version abrégée. Alors que la zone des drapeaux courts est plus facile à taper, l’utilisation de drapeaux longs est une bonne idée si vous voulez rendre votre code facile à lire.

  • B: échappe les caractères non alphanumériques; peut nécessiter AllowEncodedSlashes défini sur On.
  • C ou chaîne: enchaîne la règle à la règle suivante dans votre fichier .htaccess; le second n’est exécuté que si le premier aboutit à une correspondance.
  • CO ou cookie: créez un cookie lorsqu’une règle correspond; nécessite des attributs supplémentaires.
  • DPI ou discardpath: supprime PATH_INFO dans l’URL réécrite.
  • E ou env: définit une variable d’environnement.
  • FIN: similaire à L, cela arrête tout traitement de réécriture.
  • F ou interdit: renvoie un état interdit 403 avec la réponse à la règle.
  • G or gone: renvoie un statut 410 Gone avec la réponse à la règle.
  • H ou gestionnaire: force la règle à utiliser un gestionnaire particulier, spécifié en tant que variable.
  • L ou dernier: arrête le traitement des règles.
  • N ou suivant: redémarre l’ensemble actuel de règles, en utilisant le résultat de la règle comme entrée.
  • NC ou nocase: désactive la sensibilité à la casse pour la règle.
  • NE ou noescape: convertit les caractères spéciaux en leurs codes hexadécimaux équivalents.
  • NS ou nosubreq: empêche les réécritures d’être appliquées aux sous-demandes.
  • P ou proxy: envoie le résultat de la règle à mod_proxy et ignore toutes les règles restantes.
  • PT ou passthrough: convertit un chemin de fichier en URL.
  • QSA ou qsappend: combine la chaîne de requête avec une nouvelle.
  • QSD ou qsdiscard: supprime l’ancienne chaîne de requête et la remplace.
  • QSL ou qslast: fractionne une chaîne de requête au dernier point d’interrogation de la chaîne.
  • R ou redirection: émettez une redirection HTTP.
  • S ou skip: ignore un certain nombre de règles; doit être défini comme [S = n], où n est le nombre de règles à ignorer.
  • T or type: définit le type MIME de la réponse de la règle.

coupon d'hébergement web

Vous cherchez beaucoup sur l’hébergement mod_rewrite?
A2 Hosting a obtenu la première place lors de nos récents tests de vitesse. Vous pouvez actuellement économiser jusqu’à 50% sur leurs plans conviviaux pour les développeurs. Utilisez ce lien de réduction
pour obtenir l’accord.

Variables serveur

La liste ci-dessous contient de nombreuses variables de serveur, dont certaines que vous pourrez utiliser avec mod_rewrite. Toutes les variables ne sont pas prises en charge par tous les serveurs, et de la même manière, vous pourrez peut-être utiliser des variables de serveur non répertoriées ici.

Si vous connaissez déjà les en-têtes HTTP, de nombreuses variables de serveur dans cette liste vous seront familières, mais il y en a quelques-unes qui sont spécifiquement fournies pour une utilisation avec mod_rewrite.

  • API_VERSION: la date de la version de l’API.
  • AUTH_TYPE: l’authtype; renvoie NONE, BASIC, DIGEST ou FORM.
  • CONN_REMOTE_ADDR: l’adresse IP homologue.
  • CONTEXT_DOCUMENT_ROOT: informations sur le mappage de répertoire dans Apache.
  • CONTEXT_PREFIX: informations sur le mappage de répertoire dans Apache.
  • DOCUMENT_ROOT: le chemin absolu du document.
  • HANDLER: le nom du gestionnaire.
  • HTTP_ACCEPT: l’en-tête d’acceptation HTTP, s’il est présent dans l’en-tête de demande HTTP.
  • HTTP_COOKIE: le cookie, s’il est présent dans l’en-tête de la requête HTTP.
  • HTTP_FORWARDED: le chemin réel, s’il est présent dans l’en-tête de requête HTTP.
  • HTTP_HOST: le serveur actuel, s’il est présent dans l’en-tête de requête HTTP.
  • HTTP_PROXY_CONNECTION: le chemin du proxy HTTP, s’il est présent dans l’en-tête de la requête HTTP.
  • HTTP_REFERER: l’URL de la page de référence.
  • HTTP_USER_AGENT: l’agent utilisateur qui a été utilisé pour accéder à la page.
  • HTTP2: si la connexion utilise HTTP2; renvoie ON ou OFF.
  • HTTPS: si la connexion utilise HTTPS; renvoie ON ou OFF.
  • IPV6: si la connexion utilise IPVS; renvoie ON ou OFF.
  • IS_SUBREQ: si la demande est une sous-demande; vrai ou faux.
  • PATH_INFO: données de chemin qui suivent un nom de fichier.
  • QUERY_STRING: les caractères d’une URL, après le point d’interrogation.
  • REMOTE_ADDR: l’IP de l’utilisateur.
  • REMOTE_HOST: le nom de domaine complet de l’utilisateur.
  • REMOTE_USER: le nom d’utilisateur de l’utilisateur authentifié.
  • REMOTE_IDENT: le nom d’utilisateur de l’utilisateur authentifié, retourné par identd.
  • REQUEST_FILENAME: le chemin local vers le fichier ou le script dans la demande.
  • REQUEST_METHOD: la méthode de requête; HEAD, PUT, GET ou POST.
  • REQUEST_SCHEME: le schéma dans l’URI de demande.
  • REQUEST_URI: l’URI de la demande, comme chemin.
  • SCRIPT_FILENAME: le chemin absolu du script.
  • SCRIPT_GROUP: le nom du groupe de scripts.
  • SCRIPT_USER: l’utilisateur propriétaire du script.
  • SERVER_ADDR: l’adresse IP du serveur sur laquelle le fichier .htaccess est stocké.
  • SERVER_ADMIN: l’administrateur du serveur, tel que configuré dans Apache.
  • SERVER_NAME: le nom du serveur, tel que configuré dans Apache.
  • SERVER_PORT: le numéro de port auquel la demande a été envoyée.
  • SERVER_PROTOCOL: le protocole et la révision de la requête.
  • SERVER_SIGNATURE: la version du serveur et le nom d’hôte.
  • SERVER_SOFTWARE: la chaîne d’ID du serveur.
  • THE_REQUEST: la demande dans son intégralité.
  • TIME: la date et l’heure au format YYYYMMDDHHMMSS.
  • TIME_DAY: le jour actuel.
  • TIME_HOUR: l’heure actuelle.
  • TIME_MIN: la minute actuelle.
  • TIME_MON: le mois en cours.
  • TIME_SEC: la seconde actuelle.
  • TIME_WDAY: le jour en cours, renvoyé sous forme de nombre (commençant par 0 pour dimanche).
  • TIME_YEAR: l’année en cours.

Ressources

  • Guide du débutant pour Mod_rewrite: ce guide date de 2004, mais fournit une bonne base sur les principes de mod_rewrite.
  • Réécriture d’URL pour les débutants: un guide complet pour les débutants et les utilisateurs intermédiaires.
  • Apache Rewrite Cheatsheet: une version HTML d’une feuille de triche publiée à l’origine sur iLoveJackDaniels.com.
  • Introduction aux expressions régulières avancées: développez vos connaissances des expressions régulières avec ce guide.
  • RegEx Pal: vérifiez votre syntaxe d’expression régulière avant de la déployer sur votre site.

Sommaire

mod_rewrite est un moyen utile et puissant de contrôler le comportement d’Apache. Vous pouvez faire beaucoup de choses avec mod_rewrite que nous n’avons pas couvertes ici. Il s’agit notamment de la redirection, de la prévention du raccourci d’image, de l’interdiction de certains visiteurs de votre site, etc. La meilleure façon de tirer parti de mod_rewrite est de se renseigner sur les expressions régulières.

Lectures complémentaires et ressources

Nous avons plus de guides, tutoriels et infographies liés au développement Web:

  • Introduction et ressources PHP: apprenez tout sur le langage backend le plus populaire utilisé sur le Web.
  • Programmation réseau avec Internet Sockets: apprenez tout sur la mise en réseau sur Internet.
  • Présentation et ressources de MySQL: MySQL est l’une des bases de données les plus populaires sur Internet.

Comment choisir le bon CMS

Vous ne savez pas quel CMS vous souhaitez utiliser? Consultez notre article, Comment choisir le bon CMS.

La liste ultime des outils pour les webmasters de A à Z
Comment choisir le bon CMS

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me

About the author

Adblock
detector