Configurez des règles de réécriture d'URL sur les nœuds périphériques d'ESA pour modifier le chemin de la requête et la chaîne de requête lors des requêtes vers l'origine. Migrez les chemins du serveur d'origine sans modifier les URL visibles par les utilisateurs ni les configurations frontend.
Cas d'utilisation typiques
Migration de l'origine : Le chemin des fichiers sur l'origine est modifié, mais vous souhaitez conserver le chemin d'accès utilisateur inchangé.
Adaptation de version d'API : Réécrivez les anciens chemins de version d'API vers la nouvelle version.
Standardisation des paramètres : Uniformisez les formats de paramètres transmis par différents clients.
URL simplifiée : Mappez des chemins backend complexes vers des chemins clairs visibles par l'utilisateur.
Fonctionnement
Lorsqu'ESA exécute une tâche de préchargement de cache soumise par un client, les règles de réécriture d'URL ne s'appliquent pas à l'URL de préchargement.
La réécriture d'URL s'applique uniquement lors des requêtes vers l'origine et n'affecte pas le pipeline de traitement interne d'ESA. La clé de cache est générée à partir de l'URL d'origine, de sorte que la correspondance de cache reste inchangée. L'URL réécrite est utilisée uniquement pour les requêtes vers l'origine.
Flux d'exécution
Vérification du cache : Le nœud périphérique recherche le cache en utilisant l'URL d'origine. En cas d'absence de cache (cache miss), les règles de réécriture d'URL transforment l'URL vers le chemin cible.
Requête vers l'origine : L'URL réécrite est envoyée au serveur d'origine. La réponse est mise en cache sous l'URL d'origine en tant que clé de cache.
Retour du contenu mis en cache : Le contenu mis en cache est renvoyé au client.
Ordre d'exécution
La réécriture d'URL s'exécute après la vérification du cache et la sélection de l'origine, mais avant la modification des en-têtes de requête vers l'origine. Le chemin est ajusté après la détermination de la cible d'origine, sans affecter le traitement des en-têtes.
Configuration des règles de réécriture d'URL
Dans la console ESA, sélectionnez Sites web, puis dans la colonne Websites, cliquez sur le site cible.
Dans le volet de navigation de gauche, choisissez .
-
Dans la section Rules, Cliquez sur Transform Rules et saisissez un Rewrite URL. Configurez le Create Rule et la Rule Name, puis cliquez sur OK.
Objet de réécriture
Méthode d'opération
Description
Exemple
Path
Retain
Ne pas modifier le chemin d'origine.
-
Path
Remplacer par un chemin fixe (doit commencer par /).
/new/pathDynamic
Utiliser une expression pour générer dynamiquement le chemin.
concat("/v2", http.request.uri.path)Query String
Conserver
Ne pas modifier la chaîne de requête d'origine.
-
Static
Remplacer par des paramètres fixes (sans ?).
version=new&type=apiRetain
Utiliser une expression pour générer dynamiquement la chaîne de requête.
concat("version=new&", http.request.uri.query)
Exemples de configuration
Exemple 1 : Migration du chemin d'origine
Cas d'utilisation : L'origine déplace les images du répertoire
/images/vers le répertoire/static/img/.Si les requêtes correspondent à...
starts_with(http.request.uri.path, "/images/")-
Configuration de réécriture :
Objet de réécriture : Chemin
Méthode d'opération : Dynamique
Expression :
regex_replace(http.request.uri.path, "^/images/", "/static/img/") -
Effet de la réécriture :
Requête utilisateur :
https://example.com/images/logo.pngRequête vers l'origine :
https://origin.com/static/img/logo.png
Exemple 2 : Adaptation de version d'API
Cas d'utilisation : Réécrire les requêtes de
/api/v1/vers/api/v2/lors des requêtes vers l'origine et ajouter un identifiant de version.Si les requêtes correspondent à...
starts_with(http.request.uri.path, "/api/v1/")-
Configuration de réécriture :
Objet de réécriture : Chemin, Chaîne de requête
Méthode d'opération : Dynamique
Expression de réécriture du chemin :
regex_replace(http.request.uri.path, "^/api/v1/", "/api/v2/")Expression de réécriture de la chaîne de requête :
concat("api_version=v2&", http.request.uri.query) -
Effet de la réécriture :
Requête utilisateur :
https://example.com/api/v1/users?limit=10Requête vers l'origine :
https://origin.com/api/v2/users?api_version=v2&limit=10
Exemple 3 : Standardisation des paramètres
Cas d'utilisation : Différents clients utilisent des noms de paramètres différents (tels que
useridetuid). Uniformisez-les vers le standarduser_id.Si les requêtes correspondent à...
http.request.uri.query contains "userid="-
Configuration de réécriture :
Objet de réécriture : Chaîne de requête
Méthode d'opération : Dynamique
Expression :
regex_replace(http.request.uri.query, "userid=", "user_id=") -
Effet de la réécriture :
Requête utilisateur :
https://example.com/profile?userid=123Requête vers l'origine :
https://origin.com/profile?user_id=123
Exemple 4 : Normalisation du chemin
Cas 1
Cas d'utilisation : Supprimer les barres obliques supplémentaires (telles que
//) des URL causées par des erreurs de saisie.Remarque : La fonction
regex_replaceremplace uniquement la première correspondance dans la chaîne source.Si les requêtes correspondent à...
http.request.uri.path contains "//"-
Configuration de réécriture :
Objet de réécriture : Chemin
Méthode d'opération : Dynamique
Expression :
regex_replace(http.request.uri.path, "//+", "/") -
Effet de la réécriture :
Requête utilisateur :
https://example.com/path//to/resourceRequête vers l'origine :
https://origin.com/path/to/resource
Cas 2
Cas d'utilisation : Réduire plusieurs barres obliques consécutives en une seule barre oblique. Exemple :
/path///download//image//user.jpg.Solution : Imbriquer plusieurs appels
regex_replacepour remplacer progressivement les barres obliques consécutives.Si les requêtes correspondent à...
http.request.uri.path contains "//"-
Configuration de réécriture :
Objet de réécriture : Chemin
Méthode d'opération : Dynamique
Expression :
regex_replace(regex_replace(regex_replace(http.request.uri.path, "//+", "/"), "//+", "/"), "//+", "/")
-
Effet de la réécriture :
Requête utilisateur :
https://example.com/path///download//image//user.jpgRequête vers l'origine :
https://origin.com/path/download/image/user.jpg
Exemple 5 : Suppression de tous les paramètres de requête
Cas d'utilisation : Supprimer tous les paramètres de requête des ressources statiques. Par exemple, retirer les chaînes de requête des URI se terminant par
.css.Si les requêtes correspondent à...
ends_with(http.request.uri.path, ".css")-
Configuration de réécriture :
Objet de réécriture : Chaîne de requête
Méthode d'opération : Dynamique
Expression :
regex_replace(http.request.uri.query, ".*", "") -
Effet de la réécriture :
Requête utilisateur :
https://example.com/style.css?version=1.2.3Requête vers l'origine :
https://origin.com/style.css?
Exemple 6 : Simplification des chemins dynamiques
Cas d'utilisation : Supprimer les séquences numériques redondantes des chemins. Par exemple, retirer
123suivi de chiffres des chemins sous/example/.Si les requêtes correspondent à...
(http.request.uri matches "^/example/(.*)123[0-9]+(.*)$")-
Configuration de réécriture :
Objet de réécriture : Chemin
Méthode d'opération : Dynamique
Expression :
regex_replace(http.request.uri,"^/example/(.*)123[0-9]+(.*)$","/example/$1$2") -
Effet de la réécriture :
Requête utilisateur :
https://example.com/example/tool12300341featuresRequête vers l'origine :
https://origin.com/example/toolfeatures
Exemple 7 : Extraction des paramètres de chemin et ajout à la chaîne de requête
-
Cas d'utilisation : Extraire un segment de chemin dynamique, l'ajouter en tant que paramètre de requête et le remplacer par une chaîne fixe :
URI d'origine :
/api/v1/dynamic_value/download?version=1&size=2URI réécrite :
/api/v1/fixed/download?version=1&size=2&token=dynamic_value Si les requêtes correspondent à... Toutes les requêtes entrantes
-
Configuration de réécriture :
Objet de réécriture : Chemin + Chaîne de requête
Méthode d'opération : Dynamique
Expression de réécriture du chemin :
regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$", "/api/v1/fixed/download")Expression de réécriture de la chaîne de requête :
concat(http.request.uri.query,"&token=",regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$","$1")) -
Effet de la réécriture :
Requête utilisateur :
https://example.com/api/v1/ABC123/download?version=1&size=2Requête vers l'origine :
https://origin.com/api/v1/fixed/download?version=1&size=2&token=ABC123
Exemple 8 : Suppression de paramètres spécifiques
Cas d'utilisation : Supprimer des paramètres de requête spécifiques. Par exemple, étant donné
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6, supprimer key2, key3, key5 et key6, en ne conservant que key1 et key4.Si les requêtes correspondent à... Toutes les requêtes entrantes
-
Configuration de réécriture :
Objet de réécriture : Chaîne de requête
Méthode d'opération : Dynamique
Expression :
regex_replace(regex_replace(regex_replace(regex_replace(http.request.uri.query, "(&?key2=[^&]*)", ""), "(&?key3=[^&]*)", ""), "(&?key5=[^&]*)", ""), "(&?key6=[^&]*)", "")RemarqueChaque
regex_replaceimbriqué supprime un paramètre. Le motif(&?keyN=[^&]*)correspond au&précédent pour éviter les caractères&résiduels. -
Effet de la réécriture :
Requête utilisateur :
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6Requête vers l'origine :
https://origin.com/1.txt?key1=value1&key4=value4
Exemple 9 : Conservation de paramètres spécifiques
Cas d'utilisation : Conserver uniquement des paramètres de requête spécifiques. Par exemple, étant donné
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4, ne conserver que key1 et key4.Si les requêtes correspondent à... Toutes les requêtes entrantes
-
Configuration de réécriture :
Objet de réécriture : Chaîne de requête
Méthode d'opération : Dynamique
Expression :
concat("key1=", http.request.uri.args["key1"], "&key4=", http.request.uri.args["key4"])RemarqueLa fonction
concatreconstruit la chaîne de requête avec uniquement les paramètres spécifiés. Utilisezhttp.request.uri.args["keyN"]pour extraire chaque valeur de paramètre. Les paramètres non listés sont exclus. -
Effet de la réécriture :
Requête utilisateur :
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4Requête vers l'origine :
https://origin.com/1.txt?key1=value1&key4=value4
Exemple 10 : Exclusion des requêtes par extension de fichier et réécriture
Cas d'utilisation : Exclure les requêtes dont l'extension de fichier est
html, et réécrire toutes les autres requêtes vers un chemin spécifié.Si les requêtes correspondent à... Extension de fichier différente de
html. Expression :http.request.uri.path.extension ne html-
Configuration de réécriture :
Objet de réécriture : Chemin
Méthode d'opération : Statique
Chemin réécrit :
/static/index.html
La variable http.request.uri.path.extension renvoie l'extension du segment de fichier le plus à droite dans le chemin URI, sans le point initial. Par exemple, l'extension de /cat.jpg est jpg, l'extension de /cat est une chaîne vide, et l'extension de /cat.html est html.
Exemple 11 : Routage des requêtes selon l'extension de fichier
Cas d'utilisation : Router les requêtes possédant une extension de fichier vers
static/url, et router les requêtes sans extension de fichier versstatic/index.html.-
Si les requêtes correspondent à... et configuration de réécriture :
-
Pour les requêtes avec une extension de fichier, utilisez la condition de correspondance
http.request.uri.path.extension ne "".Objet de réécriture : Chemin
Méthode d'opération : Statique
Chemin réécrit :
/static/url -
Pour les requêtes sans extension de fichier, utilisez la condition de correspondance
http.request.uri.path.extension eq "".Objet de réécriture : Chemin
Méthode d'opération : Statique
Chemin réécrit :
static/index.html
-