Le serveur WEB Nginx donne la possibilité de réécrire très facilement des URL.
Pour cela, on utilise les directives rewrite ou return.
Les deux permettent de créer des redirections 301, 302 mais la directive rewrites est bien plus puissante.
En effet, on peut utiliser les expressions régulières pour créer des réécritures d'URL complexes.
Dans ce tutoriel, je vous montre comment fonctionne la réécriture d'URL sur Nginx.
Comment utiliser rewrite sur Nginx
La directive rewrite donne la possibilité d'une réécriture complète d'une ou un groupe d'URL en utilisant les expressions régulières.
Cela est utile lorsque l'on doit manipuler des arguments d'URL par exemple.
Voici la syntaxe :
rewrite regex URL [flag];
- Regex : est l'expression régulière pour correspondre à une ou un groupe d'URL
- URL : L'URL finale réécrite
- Flag : les drapeaux break, last, redirect ou permanent. Voir le paragraphe suivant
Les variables et drapeaux
return et rewrite acceptent plusieurs variables dont voici les principales :
- $host est le nom d'hôte
- $scheme est utilisé pour définir le schéma de l'URL (HTTP ou HTTPS)
- $request_uri contient une URI complète avec des paramètres
Les drapeaux de rewrite :
- Last : arrête le traitement de l'ensemble actuel de directives rewrite et démarre une recherche d'un nouveau bloc location correspondant à l'URI modifiée
- break : arrête le traitement de l'ensemble actuel de la directive rewrite et aucune recherche de bloc location avec la nouvelle URL est effectuée
- redirect renvoie une redirection temporaire avec le code 302; utilisé si une chaîne de remplacement ne commence pas par "http: //", "https: //" ou "$scheme"
- permanent : Renvoie une redirection permanente avec le code 301
Comment réécrire des URL avec rewrites avec Nginx
Utilisez return pour retourner un code spécifique ou effectuer une redirection sur une URL.
Tandis qu'il vaut mieux utiliser rewrite pour effectuer des redirections sur des groupes d'URL ou manipuler des arguments d'URI.
Réécrire une page statique avec rewrite
Voici un exemple de réécriture d'URL statique avec rewrite :
server {
[...
]
location = /tutoriel-malekal
{
rewrite ^/tutoriel-malekal$ /malekal-tuto.html break;
}
[...]
}
- Le bloc location correspond à l'URL avec /tutoriel-malekal
- Puis rewrite cherche le motif ^/tutoriel-malekal?$
- Le caractère ^ indique que la page doit commencer par le mot tutoriel
- Le caractère $ correspond à la fin de l'URL
- /malekal-tuto.html est la nouvelle URL réécrite
- break indique d'arrêter la réécriture ici et aucune recherche de bloc location n'est effectuée avec la nouvelle URL
Réécrire des pages dynamiques
On peut aussi réécrire des pages dynamiques qui contiennent des arguments.
Cela est utile, par exemple en PHP.
Imaginons la page https://ift.tt/32baVAX que vous désirez réécrire en https://ift.tt/3mh4weq.
On peut faire cela en seule règle rewrite de cette manière :
server {
[...]
location = /user.php
{
rewrite user.php?id=$1 ^user/([0-9]+)/?$ break;
}
[...]
}
- La directive location /user.php indique de n'appliquer le bloc que pour les pages /user.php
- Puis la directive rewrite s'applique sur les pages user.php?id=$1
- L'expression régulière dans le support carré [0-9] + contient une plage de caractères compris entre 0 et 9. Le signe + signifie correspondant à un ou plusieurs des caractères précédents. Sans le signe + +, l'expression régulière ci-dessus correspondra à seulement 1 caractère comme 5 ou 8 mais pas avec 25 ou 44
- La parenthèse () dans l'expression régulière fait référence à la référence arrière. Le $1 de l'URL de remplacement user.php?id=$1 fait référence à cette référence arrière
Ainsi, si un utilisateur se connecte avec l'URL https://ift.tt/3soODqp, il sera redirigé vers https://ift.tt/3yG9UwB grâce à la réécriture de l'URL.
Comment retourner du texte ou JSON
On peut aussi return pour retourner du texte ou du contenu en JSON
Par exemple pour retourner des données au format texte :
location ~ ^/get_text {
default_type text/html;
return 200 'This is test text!';
}
Retourner des données en JSON :
location ~ ^/get_json {
default_type application/json;
return 200 '{"status":"success","result":"nginx test json"}';
}
Créer des redirections de pages, URL, domaine
Enfin rewrites vous permet aussi de créer des redirections de pages, URL ou domaine.
Le tutoriel suivant vous explique comment faire avec de multiples exemples
Liens
- Nginx : un serveur WEB rapide
- Configurer le cache de Nginx
- Nginx : Comment activer un site avec sites-enabled ou nginx-modsite
- Protéger Nginx des attaques DoS et bruteforce
- Optimiser Nginx pour améliorer la vitesse des sites WEB
- Optimiser le cache de Nginx et fastcgi
- Nginx : faire une redirection (301, 302, HTTP vers HTTPS, URL, …)
- Nginx : comment réécrire des URL avec rewrite
L’article Nginx : comment réécrire des URL avec rewrite est apparu en premier sur malekal.com.
0 Commentaires