Nginx

Comment utiliser la réécriture d'URL

Comment utiliser la réécriture d'URL
La réécriture d'URL est un processus de modification de l'URL de la demande en quelque chose d'autre tel que défini dans le serveur Web. Nginx utilise le module ngx_http_rewrite_module, qui utilise principalement les directives return, rewrite à des fins de réécriture. Outre ces directives définies dans ce module, la directive map, définie dans ngx_http_map_module, peut également être utilisée pour réécrire facilement des URL. Ce guide a pour but d'expliquer environ 2 directives principales - return, rewrite et leurs indicateurs, leur fonctionnement et leurs applications.

Conditions préalables

Ce guide est optimisé pour Nginx 1.0.1 et supérieur, et il est donc fortement recommandé de mettre à jour l'instance Nginx existante vers la version susmentionnée ou supérieure. Cependant, certaines des commandes, syntaxes peuvent toujours fonctionner pour n'importe quelle version antérieure à la version susmentionnée. Étant donné que ce guide concerne la réécriture d'URL, ce qui est un sujet un peu avancé, il suppose que le public est au courant de la procédure d'installation de Nginx, et donc ce n'est pas expliqué ici.

Revenir

Return est la directive de base qui effectue la réécriture d'URL et est simple à comprendre. Il n'utilise pas d'expressions régulières, mais il peut inclure des variables à analyser, capturées à partir du chemin du bloc de localisation. Habituellement, la directive return est utilisée pour rediriger l'URL de la demande vers un emplacement différent, et donc elle utilise souvent des codes HTTP comme 301 pour la redirection permanente et 302 pour la redirection temporaire. Les extraits de code suivants illustrent certains des cas d'utilisation de la directive return.

L'extrait de code suivant redirige l'URL de la demande vers Google.com. Il peut être utilisé soit directement sous le bloc de code serveur, soit sous un bloc de code de localisation, mais assurez-vous de ne pas rediriger vers le même domaine afin d'éviter la boucle de redirection

retour 301 https://google.com;

L'extrait de code suivant redirige l'URL de la demande vers Nucuta.com avec le chemin, par exemple l'exemple ci-dessus ne contient aucun chemin, paramètre, et donc quelle que soit l'URL tapée dans la barre d'adresse, la requête est redirigée vers le domaine racine de Google, alors que dans l'exemple suivant, le chemin, ainsi que les paramètres sont reportés sans le nom de domaine. Alternativement, $is_args$args peut être utilisé, mais au lieu de $request_uri, la variable $uri doit être utilisée car $request_uri contient également les paramètres de l'URL. Si l'exigence est de rediriger vers un répertoire différent du même domaine, utilisez la variable $host au lieu du nom de domaine dans la directive return, par exemple dans l'exemple suivant au lieu de nucuta.com, utilisez $host.

retour 301 https://nucuta.com$request_uri;

L'extrait de code suivant redirige la demande entrante vers le répertoire de chemin du même domaine et le schéma, ce qui signifie que si l'extrait de code suivant est utilisé dans http://Linux.com, et si un visiteur lui a fait une demande, il est redirigé vers le répertoire du chemin, et donc l'extrait de code suivant est utile lors de la gestion d'un grand nombre de sites Web. Ici, $scheme définit le protocole de l'URL, tel que FTP, HTTP, HTTPS, et $host définit le domaine du serveur actuel avec son extension de domaine, telle que Google.com, Linux.Réseau etc. Comme cela n'effectue aucune redirection de protocole, comme de HTTP vers HTTPs, cela doit être fait manuellement comme dans le deuxième exemple.

renvoie 301 $scheme://$host/path ;
si (schéma $ != "https")
renvoie 301 https://$host$request_uri;

Un autre cas d'utilisation utile de la directive de retour est la possibilité d'inclure des variables regex, mais pour cela, l'expression régulière doit être spécifiée dans le bloc de localisation, et elle doit capturer un modèle, puis le modèle capturé peut être combiné avec l'URL existante dans la directive de retour à des fins de redirection, par exemple dans l'exemple suivant, lorsqu'une demande est faite pour accéder à un fichier texte, il capture le nom du fichier texte dans le bloc d'emplacement, puis il transmet ce nom à la directive return, puis la directive return le combine avec l'existant URL pour rediriger la demande vers un autre répertoire.

emplacement ~* ^/([^/]+.txt)$
retour 301 /chrome/1$;

Récrire

Rewrite est une directive utilisée pour réécrire les URL en interne dans le serveur Web sans exposer le mécanisme sous-jacent au côté client. Selon sa syntaxe, il est utilisé avec des expressions régulières. La syntaxe de base va comme suit. L'espace réservé regex sert à utiliser des expressions régulières, l'espace réservé de remplacement sert à remplacer l'URL correspondante, tandis que le drapeau sert à manipuler le flux de l'exécution. Pour le moment, les drapeaux utilisés dans la directive de réécriture sont break, permanent, redirect et last.

réécrire le remplacement de l'expression régulière [drapeau] ;

Avant de passer aux expressions régulières, aux remplacements, à la capture de modèles et à la variable, il est important de savoir comment les indicateurs permettent au moteur interne de Nginx de se comporter. Il existe quatre indicateurs principaux utilisés avec la directive de réécriture comme expliqué précédemment, parmi lesquels des indicateurs de redirection permanents peuvent être associés car les deux exécutent la même fonctionnalité, ce qui signifie une redirection.

Réorienter

L'indicateur de redirection est utilisé pour signaler au navigateur que la redirection est temporaire, ce qui est également utile aux robots des moteurs de recherche pour reconnaître que la page est temporairement déplacée et sera rétablie à son emplacement d'origine quelque temps plus tard. Lorsque la page signale qu'il s'agit de 302, les moteurs de recherche n'apportent aucune modification à son indexation et, par conséquent, les visiteurs voient toujours la page d'origine dans l'index des moteurs de recherche lors de la recherche, ce qui signifie que l'ancienne page n'est pas supprimée et, en plus, tous les éléments de qualité , comme le classement de la page, le jus de lien n'est pas transmis à la nouvelle page.

emplacement /

réécrire ^ http://155.138.XXX.XXX/chemin redirection ;

Permanent

L'indicateur permanent est utilisé pour signaler au navigateur que la redirection est permanente, ce qui est également utile aux robots des moteurs de recherche pour reconnaître que la page est définitivement déplacée et ne sera PAS rétablie à son emplacement d'origine quelque temps plus tard, comme avec un déplacement temporaire. Lorsque la page signale qu'il s'agit de 301, les moteurs de recherche modifient son indexation et, par conséquent, les visiteurs voient la nouvelle page dans l'index du moteur de recherche au lieu de l'ancienne page lors de la recherche, ce qui signifie que l'ancienne page est remplacée par la nouvelle page. les qualités, telles que le classement de la page, le jus de lien sont transmis à la nouvelle page.

emplacement /

réécrire ^ http://155.138.XXX.XXX/chemin permanent ;

Expression régulière, capture de modèle et variables.

Nginx utilise fortement les expressions régulières avec la directive de réécriture, et donc connaître les expressions régulières est utile dans ce segment.  Il existe plusieurs types d'expressions régulières, mais Nginx utilise des expressions régulières compatibles Perl aka PCRE. Avoir un outil de test d'expression régulière est utile pour s'assurer que le modèle écrit fonctionne bien au préalable en l'utilisant dans le fichier de configuration Nginx. Ce guide recommande https://regex101.com/ comme outil, et tous les exemples suivants sont testés minutieusement avec l'outil susmentionné.

Expressions régulières

réécrire ^/fr/(.*)$ http://nucuta.com/1 $ permanent ;

Un modèle typique de directive de réécriture va comme ci-dessus, il contient la directive de réécriture au début, puis avec un espace le "modèle" dans l'expression régulière, puis avec un espace le "remplacement", puis enfin le "drapeau". La directive rewrite peut être placée n'importe où entre les crochets du serveur, mais il est recommandé de la conserver après avoir spécifié les directives listen, server_name, root et index. Lorsqu'un visiteur fait une demande au serveur, une URL est envoyée avec la demande, puis si l'URL correspond au modèle d'expression régulière spécifié dans la directive de réécriture, elle est réécrite en fonction du remplacement, puis le flux d'exécution est manipulé en fonction sur le drapeau.

Le modèle d'expression régulière utilise des crochets pour indiquer le groupe, dont la sous-chaîne est extraite de l'URL lors de la correspondance du modèle regex avec l'URL de la demande, puis cette sous-chaîne extraite de l'URL est affectée à la variable dans le « remplacement » de la directive de réécriture. S'il y a plusieurs groupes appariés, la sous-chaîne de chaque groupe apparié est affectée aux variables en « remplacement » dans un ordre numérique, ce qui signifie que la sous-chaîne du premier groupe apparié est affectée à la première variable (1 $), sous-chaîne du le deuxième groupe apparié est affecté à la deuxième variable ($2), et ainsi de suite.

Sur 4 drapeaux, 2 drapeaux ont déjà été expliqués dans ce guide, les autres sont les derniers, et cassent. Avant de comprendre comment fonctionnent les indicateurs restants, il est important de comprendre comment le moteur Nginx se comporte avec les directives de réécriture. Lorsqu'une URL est envoyée avec une demande, le moteur Nginx essaie de la faire correspondre avec un bloc d'emplacement. Qu'il corresponde ou non, si une directive comme rewrite, return est découverte, elle est exécutée séquentiellement. Si l'URL envoyée correspond au modèle d'une directive de réécriture, le moteur Nginx exécute l'intégralité du fichier de configuration, quel que soit l'endroit où la directive de réécriture est spécifiée en tant que boucle, jusqu'à ce que l'URL nouvellement réécrite corresponde à l'un des blocs d'emplacement.

L'URL suivante est utilisée comme démonstration pour expliquer comment les deux indicateurs font que le flux d'exécution du moteur Nginx se comporte avec la directive de réécriture. La capture d'écran suivante représente la structure des fichiers du serveur Web.

http://155.138.XXX.XXX/navigateur/échantillon.txt (l'URL envoyée en tant que demande)

Lorsqu'aucun indicateur n'est utilisé

Lorsqu'aucun indicateur n'est utilisé, les deux directives de réécriture sont exécutées séquentiellement ; donc la première URL de la liste suivante se transforme en 2sd, puis 2sd L'URL se transforme en la dernière URL Ainsi, lorsque l'échantillon.txt dans le dossier du navigateur est demandé, le serveur Web sert en fait l'échantillon.txt dans le dossier racine. Étant donné que la réécriture d'URL est complètement abstraite du navigateur, elle ne voit aucune différence dans le service par rapport à la directive de retour qui indique au navigateur si la demande a été redirigée ou non avec un numéro HTTP.

  1. http://155.138.XXX.XXX/navigateur/échantillon.SMS
  2. http://155.138.XXX.XXX/chrome/échantillon.SMS
  3. http://155.138.XXX.XXX/échantillon.SMS
emplacement /

réécrire ^/navigateur/(.*)$ /chromé/1$;
réécrire ^/chrome/(.*)$ /1$;
emplacement /chromé
try_files $uri $uri/ =404;

Lorsque Break ou Last Flag est spécifié en dehors du bloc d'emplacement

Lorsque break ou last flag est spécifié en dehors du bloc d'emplacement, les directives de réécriture après la directive de réécriture correspondante ne sont pas du tout analysées, par exemple dans l'exemple suivant, l'URL de la demande est réécrite dans le 2sd un dans la liste suivante quel que soit le drapeau utilisé, et c'est tout.

  1. http://155.138.XXX.XXX/navigateur/échantillon.SMS
  2. http://155.138.XXX.XXX/chrome/échantillon.SMS
emplacement /

réécrire ^/navigateur/(.*)$ /chrome/$1 dernier;#break
réécrire ^/chrome/(.*)$ /$1 dernier;#break
emplacement /chromé
try_files $uri $uri/ =404;

Quand le dernier indicateur est utilisé à l'intérieur d'un bloc d'emplacement

Lorsque le dernier indicateur est utilisé à l'intérieur d'un bloc d'emplacement, il arrête d'analyser plus de directives de réécriture à l'intérieur de ce bloc d'emplacement particulier et plonge dans le prochain bloc d'emplacement de réécriture si l'URL réécrite correspond au chemin de ce bloc d'emplacement, puis il exécute le directive de réécriture suivante à l'intérieur de celui-ci.

  1. http://155.138.XXX.XXX/navigateur/échantillon.SMS
  2. http://155.138.XXX.XXX/chrome/échantillon.SMS
  3. http://155.138.XXX.XXX/échantillon.SMS
emplacement /
réécrire ^/navigateur/(.*)$ /chrome/$1 dernier ;

emplacement /chromé
réécrire ^/chrome/(.*)$ /1$ en dernier ;
try_files $uri $uri/ =404;

Lorsque l'indicateur de rupture est utilisé à l'intérieur d'un bloc d'emplacement

Break flag, d'autre part, lorsqu'il se trouve à l'intérieur d'un bloc d'emplacement, arrêtez d'analyser plus de directives de réécriture, quel que soit leur emplacement, lorsqu'une directive de réécriture correspond à l'URL de la demande et sert le contenu à l'utilisateur.

emplacement /
réécrire ^/navigateur/(.*)$ /chrome/$1 pause ;

emplacement /chromé
réécrire ^/chrome/(.*)$ /1$ de pause ;
try_files $uri $uri/ =404;

Conclusion

La réécriture d'URL est un processus de réécriture d'URL au sein d'un serveur Web. Nginx fournit plusieurs directives telles que les directives return, rewrite, map pour rendre cela possible. Ce guide montre ce que sont les directives de retour et de réécriture, et comment elles sont utilisées pour réécrire facilement des URL. Comme le montrent les exemples, la directive return convient pour signaler le navigateur et le moteur de recherche parcourt la localisation de la page, tandis que la directive rewrite est utile pour faire abstraction du processus de réécriture d'URL sans que le navigateur sache ce qui se passe derrière la scène. Ceci est très utile pour servir du contenu via un CDN, un serveur mis en cache ou à partir d'un emplacement différent au sein du réseau. Les utilisateurs ne savent jamais d'où vient la ressource car le navigateur n'affiche que l'URL qui leur est donnée.

Comment inverser le sens de défilement de la souris et des pavés tactiles dans Windows 10
Souris et Pavé tactiles rendent non seulement l'informatique facile, mais plus efficace et moins chronophage. Nous ne pouvons pas imaginer une vie san...
Comment changer la taille, la couleur et le schéma du pointeur et du curseur de la souris sous Windows 10
Le pointeur et le curseur de la souris dans Windows 10 sont des aspects très importants du système d'exploitation. Cela peut également être dit pour d...
Moteurs de jeux gratuits et open source pour le développement de jeux Linux
Cet article couvrira une liste de moteurs de jeux gratuits et open source qui peuvent être utilisés pour développer des jeux 2D et 3D sur Linux. Il ex...