Créer des règles de redirection et de réécriture en .htaccess sur Apache Webserver

Créer des règles de redirection et de réécriture en .htaccess sur Apache Webserver

Lorsque vous utilisez le serveur Web Apache, .htaccess Les fichiers (également appelés «Fichiers de configuration distribués») sont utilisés pour spécifier la configuration sur une base par répertoire, ou plus généralement pour modifier le comportement du serveur Web Apache sans avoir à accéder directement aux fichiers d'hôtes virtuels (ceci est généralement impossible par exemple, sur les hôtes partagés). Dans ce tutoriel, nous voyons comment nous pouvons établir des redirections d'URL et des règles de réécriture à l'intérieur .htaccess des dossiers.

Dans ce tutoriel, vous apprendrez:

  • Comment .Les fichiers htaccess fonctionnent
  • Comment configurer les règles de réécriture de l'URL dans .fichiers htaccess en utilisant le Réécriture directif
  • Comment configurer les règles de redirection de l'URL dans .fichiers htaccess en utilisant le Réorienter et Rediriger directives
Créer des règles de redirection et de réécriture en .htaccess sur Apache Webserver

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Distribution indépendante
Logiciel Serveur Web Apache
Autre Aucune autre exigence nécessaire
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier

Si vous utilisez .fichiers htaccess?

Comme nous l'avons déjà mentionné, l'utilisation de .htaccess Les fichiers ne sont pas recommandés si vous pouvez fonctionner directement sur des fichiers de configuration d'hôte virtuels, car il ralentit le serveur Web Apache (lorsque le Autoriser Override directive est utilisée pour permettre l'utilisation de .htaccess Fichiers, le serveur Web scanne chaque répertoire qui les recherche). Dans certaines situations, cependant, l'utilisation de .htaccess Les fichiers sont la seule solution.

L'ensemble des directives qui peuvent être utilisées dans .htaccess Les fichiers sont établis dans la configuration du site principal via le Autoriser Override directive, à l'intérieur d'un strophe; Par exemple, pour permettre l'utilisation de toutes les directives possibles, nous écrivions quelque chose comme:

 Allaiter tout  

Les instructions seront appliquées à .htaccess Fichiers trouvés dans le répertoire spécifié et tous ses sous-répertoires.

Pour les directives que nous utiliserons dans ce tutoriel pour fonctionner, le mod_alias et mod_rewrite Les modules Apache doivent être activés.

Redirections (mod_alias)

Comme spécifié précédemment, dans notre .htaccess fichiers que nous pouvons vouloir spécifier des règles de redirection, de sorte que lorsqu'une URL est demandée, le client est redirigé vers un autre.

Nous avons essentiellement deux façons d'effectuer l'opération: en utilisant le Réorienter ou la Rediriger directives. Quelle est la différence entre les deux? Le premier nous a permis d'établir une redirection basée sur des matchs URL simples et simples; Le premier fait essentiellement la même chose mais est plus puissant, car avec lui nous pouvons utiliser expressions régulières.

La directive «rediriger»

Voyons quelques exemples de l'utilisation du réorienter directif. Supposons que nous voulons rediriger notre site entier:

Rediriger 301 / https: // url / vers / rediriger / vers 


Celui ci-dessus est un exemple assez «extrême». Analysons la syntaxe. En tant que première chose, nous avons spécifié la directive: Réorienter.

La deuxième chose que nous avons fournie est le code HTTP à utiliser pour la redirection: cela peut être fourni soit en tant que statut numérique, soit sous la forme d'une chaîne.
Quelques exemples:

Code http MOT-CLÉ
301 permanent
302 temp
303 voir
410 disparu

Dans l'exemple précédent, nous avons configuré un permanent redirection depuis que nous avons utilisé le 301 Code http. Un équivalent de cela serait:

Rediriger permanent / https: // url / vers / rediriger / vers 

Le type de redirection peut être omis complètement: quand c'est le cas, le 302 code (redirection temporaire) Il est utilisé par défaut.

Le troisième argument que nous avons fourni en règle est le absolu Chemin de la ressource «originale» qui devrait être appariée. Dans ce cas, nous avons utilisé / / qui est la racine du site, car nous voulons le rediriger complètement. Ici le schème et héberger partie de l'URL devoir être omis.

Le quatrième argument est la «nouvelle» URL dans laquelle l'utilisateur doit être redirigé vers. Dans ce cas, comme nous l'avons fait dans l'exemple ci-dessus, nous pouvons utiliser une URL complète, y compris schème et héberger, ou les omettre et utiliser juste un chemin: dans ce dernier cas, il serait considéré comme faisant partie du même site d'origine. Cet argument est obligatoire si le statut de redirection spécifié est entre 301 et 399, mais Doit être omis Si le statut fourni n'est pas dans cette plage. Cela a du sens: imaginez que nous utilisons un 410 statut pour signaler que la ressource a disparu: cela n'aurait aucun sens de spécifier une URL de redirection. Dans ce cas, nous écrivions simplement:

Rediriger 410 / Path / OF / Resource 


La directive «redirectmatch»

Avec la directive «Redirection», nous pouvons spécifier le chemin de l'URL à rediriger, mais il doit correspondre clair et simple, car il est spécifié. Et si nous voulons effectuer quelque chose de plus complexe, car par exemple pour rediriger les demandes de tous les fichiers avec le .html extension? Dans ces cas, nous pouvons utiliser le Rediriger directive et utiliser un expression régulière. Voyons un exemple:

RedirectMatch 301 (.*) \.HTML $ 1 $.php 

Dans l'exemple ci-dessus, nous avons redirigé toutes les demandes de .html fichiers sur notre site vers les fichiers avec le même nom et le même chemin, mais avec le même .php extension. Analysons la règle.

Comme toujours, la première chose que nous avons fournie est la directive, dans ce cas Rediriger. Après cela, comme nous l'avons fait auparavant, nous avons fourni le code HTTP à utiliser pour la redirection; Ensuite, et c'est la chose intéressante, nous avons utilisé le (.*) \.html $ expression régulière.

À ceux d'entre vous qui connaissent déjà expirat Cela devrait être immédiatement clair, mais voyons comment cela fonctionne: le . (point) dans l'expression régulière correspond à tous les caractères: il est suivi par le * qui établissent que l'expression précédente doit être appariée 0 fois ou plus. L'expression est enfermée entre parenthèses, donc elle est groupée, et la partie de l'URL qui correspond à elle peut être référencée plus tard via le 1 $ variable (plusieurs groupes peuvent être utilisés - ils sont «nommés» progressivement, donc par exemple pour correspondre au deuxième groupe que nous pouvons utiliser 2 $). Après la partie de l'expression entourée de parenthèses, nous avons spécifié que le chemin devrait se terminer par .html: vous pouvez voir que nous avons échappé au . avec une barre de barre pour qu'il
être égalé littéralement. Enfin nous avons utilisé $ Pour correspondre à la fin de la ligne.

Comme argument pour l'URL de redirection que nous avons utilisée 1 $.php. Comme nous l'avons déjà expliqué 1 $ est utilisé pour référencer la partie de l'URL qui correspondait à l'expression régulière entre parenthèses (qui est le chemin complet moins le .html extension), donc ce que nous faisons ici est essentiellement d'utiliser le même chemin mais avec le .php extension.

Réécriture d'URL (mod_rewrite)

Les règles de réécriture d'URL peuvent être les deux transparent ou visible par l'utilisateur. Dans le premier cas, l'utilisateur demande une page, et le serveur, en interne, traduit la demande sur la base de la règle fournie afin de servir la ressource: l'utilisateur ne remarque pas ce qui se passe, car l'URL de son navigateur ne fait pas t changement. Dans le deuxième cas, nous obtenons plutôt une redirection complète visible par l'utilisateur.

Commençons par le premier cas. Si nous voulons utiliser la réécriture de l'URL, la première chose que nous devons faire (dans ce cas dans notre .htaccess fichier) est d'écrire la directive suivante:

Réécrire 

Le Réécriture La directive, comme son nom l'indique, est nécessaire pour modifier l'état du moteur de réécriture Apache. Dans l'exemple ci-dessus, nous l'avons activé; Pour le désactiver, nous devons plutôt écrire:

Réécrire 


Comme exemple, supposons que nous ayons une ressource appelée page.html Dans notre serveur, qui était atteint par l'URL simple et simple: http: // localhost / page.html. Imaginez maintenant que pour certaines raisons, nous avons renommé le fichier HTML, pour nouvelle page.html, Mais pour des raisons évidentes, nous voulons que nos clients puissent toujours atteindre la ressource avec l'ancienne URL (peut-être l'ont peut-être stockée dans leurs signets de navigateur). Ce que nous pourrions faire, c'est écrire ce qui suit, très
Règle simple:

Réécriture sur la réécriture ^ page \.html / newpage.html 

La syntaxe de la règle est très similaire à celle que nous avons utilisée pour le Rediriger Directive: nous avons d'abord la directive elle-même, Réécriture, que nous avons le modèle utilisé pour la correspondance de l'URL: ce doit être un expirat. Après cela, nous avons le substitution chaîne, qui est utilisée pour remplacer l'URL d'origine.

Il y a un quatrième élément qui peut être utilisé dans la définition d'un Réécriture sont les drapeaux, qui sont utilisés pour modifier le comportement du serveur Web lorsqu'une certaine règle est égalée.

Voyons un exemple: avec la règle que nous avons définie ci-dessus, comme nous l'avons déjà dit, aucune redirection ne se produit: l'URL dans la barre d'adresse du navigateur ne change pas. Si nous voulons qu'une redirection se produise, nous devons ajouter le R Flag à l'expression:

Réécriture sur la réécriture ^ page \.html / newpage.html [r] 

Des drapeaux sont fournis entre les supports: dans ce cas spécifique R Le drapeau fait interpréter la règle comme une redirection. Il est même possible de spécifier le type de redirection qui devrait avoir lieu, en spécifiant le code HTTP associé, par exemple:

Réécriture ^ page \.html / newpage.html [r = 301] 

Une autre chose courante à laquelle la réécriture d'URL est utilisée est de «embellir» les URL, à des fins de référencement. Disons, par exemple, nous avons un script PHP qui récupère une base de données un certain produit par son identifiant fourni comme paramètre de requête en
L'URL, par exemple:

http: // localhost / produits.php?id = 1 

Pour rendre la ressource disponible au http: // localhost / produits / 1 URL, nous pourrions écrire la règle suivante:

Réécriture de la réécriture ^ produits / ([[0-9] +) $ / produits.php?id = 1 $ 

Avec le [0-9] Regex, nous correspondons à tous les chiffres, et avec le + Nous disons que l'expression précédente doit correspondre 1 fois ou plus Pour que la règle soit exécutée. L'expression appariée est enfermée entre parenthèses, nous pouvons donc référencer la partie appariée de l'URL dans la chaîne «Destination», en utilisant le 1 $ variable. De cette façon, l'ID du produit que nous fournissons dans l'URL «embelli» devient la valeur du identifiant variable dans la chaîne de requête.

Réécrire des conditions

Nous venons de voir comment, pour qu'une règle de réécriture soit appliquée, l'expression régulière doit correspondre à l'URL fournie par l'utilisateur. Dans le dernier exemple, nous avons vu comment le http: // localhost / produits / 1 L'URL peut être réécrite en interne pour http: // localhost / produits.php?id = 1. Mais que se passe-t-il si le chemin spécifié par la nouvelle URL fait référence à un «vrai» fichier existant sur le serveur? Et si, par exemple, / produits / 1 est un fichier régulier, et nous voulons qu'il soit servi comme il est? Dans des cas comme celui-ci, nous pouvons utiliser le Réécriture directif.

Avec le Réécriture directive, nous spécifions une condition qui devrait être respectée pour que la réécriture de l'URL ait lieu. Dans ce cas, par exemple, nous pouvons vouloir établir que si le Produits / 1 Le fichier existe sur le serveur, la redirection
ne devrait pas avoir lieu. Nous écrivions:

Réécriture sur rewriteCond% request_filename !-F Rewriterule ^ Products / ([[0-9] +) $ / produits.php?id = 1 $ 

Nous utilisons le Réécriture directive, avant le Réécriture. La première chose que nous avons transmise à la directive est le Strime de test qui devrait être apparié. Dans ce contexte, nous pouvons utiliser une série de variables de serveur prédéfinies, comme % Request_filename:
il fait référence au Le chemin du système de fichiers local complet vers le fichier ou le script correspondant à la demande.

Ici, nous ne pouvons pas fournir une liste complète de toutes les variables disponibles, que vous pouvez trouver en visitant la documentation Apache Mod_rewrite.

Après la «chaîne de test», nous spécifions la condition qui doit être appariée: dans ce cas, nous avons utilisé !-F Pour spécifier que pour que l'URL de réécriture soit appliquée, le fichier ou le script correspondant à la demande ne doit pas être un fichier régulier existant sur le serveur (-F correspond à un fichier régulier, et ! inverse le résultat).

Celui ci-dessus, est un exemple vraiment simple de Réécriture directive: plus d'un peut être fourni avant le Réécriture Directive: toutes devraient correspondre pour que ce dernier soit appliqué.

Conclusions

Dans cet article, nous avons vu comment pouvons-nous spécifier les redirections d'URL et les règles de réécriture d'URL dans .htaccess Fichiers lorsque vous utilisez le serveur Web Apache. Nous avons vu des exemples très faciles de l'utilisation du Réorienter, Rediriger et Réécriture directives et comment pouvons-nous les utiliser pour obtenir des comportements spécifiques. Cela était signifié comme une introduction auxdits sujets, alors jetez un œil aux pages de documentation officielles pour les modules MOD_ALIAS et MOD_REWRITE pour une connaissance plus approfondie.

Tutoriels Linux connexes:

  • Configuration OpenLitesPeed HTACCESS
  • Activer .HTACCESS sur Apache 2 Linux Server
  • Comment gérer les hôtes virtuels dynamiques avec Apache et le…
  • Comment migrer Apache vers Nginx en convertissant les objets VirtualHosts en…
  • Les hôtes virtuels basés sur IP et le nom Apache expliqués
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Comment utiliser Apache pour rediriger tout le trafic de HTTP à HTTPS
  • Comment configurer vsftpd sur Debian
  • Masterring Bash Script Loops
  • Analyseur de journal Linux Apache