Configurez des règles de réécriture d'URL sur les nœuds edge ESA pour modifier le chemin et la chaîne de requête lors des requêtes vers l'origine. Migrez ainsi les chemins du serveur d'origine sans modifier les URL visibles par les utilisateurs ni les configurations frontales.
Cas d'usage typiques
Migration d'origine : Le chemin des fichiers sur l'origine change, mais vous souhaitez conserver le chemin d'accès utilisateur inchangé.
Adaptation de version d'API : Réécrivez les chemins d'une ancienne version d'API vers la nouvelle version.
Normalisation des paramètres : Unifiez les formats de paramètres transmis par différents clients.
URL simplifiée : Associez des chemins backend complexes à des chemins utilisateur épurés.
Fonctionnement
Si la réécriture d'URL est activée, les requêtes de préchargement doivent utiliser l'URL réécrite.
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 étant générée à partir de l'URL d'origine, la correspondance du cache reste inchangée. L'URL réécrite sert exclusivement aux requêtes vers l'origine.
Flux d'exécution
Vérification du cache : Le nœud edge recherche le contenu en cache via l'URL d'origine. En cas d'absence dans le cache, les règles de réécriture transforment l'URL en chemin cible.
Requête vers l'origine : Le nœud edge envoie l'URL réécrite au serveur d'origine. La réponse est mise en cache sous l'URL d'origine comme clé de cache.
Restitution du contenu mis en cache : Le nœud edge renvoie le contenu en cache au client.
Ordre d'exécution
La réécriture d'URL intervient 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é une fois la cible d'origine déterminée, sans impacter le traitement des en-têtes.
Configurer les règles de réécriture d'URL
Dans la console ESA, sélectionnez Websites, 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 la réécriture
Méthode d'opération
Description
Exemple
Path
Retain
Ne modifie pas le chemin d'origine.
-
Path
Remplace par un chemin fixe (doit commencer par /).
/new/pathDynamic
Utilise une expression pour générer dynamiquement le chemin.
concat("/v2", http.request.uri.path)Query String
Retain
Ne modifie pas la chaîne de requête d'origine.
-
Static
Remplace par des paramètres fixes (sans ?).
version=new&type=apiRetain
Utilise 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 de chemin d'origine
Cas d'usage : L'origine déplace les images du répertoire
/images/vers le répertoire/static/img/.Condition de correspondance :
starts_with(http.request.uri.path, "/images/")-
Configuration de la réécriture :
Objet de la réécriture : Path
Méthode d'opération : Dynamic
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'usage : Réécrire les requêtes de
/api/v1/vers/api/v2/lors des requêtes vers l'origine et ajouter un identifiant de version.Condition de correspondance :
starts_with(http.request.uri.path, "/api/v1/")-
Configuration de la réécriture :
Objet de la réécriture : Path, Query string
Méthode d'opération : Dynamic
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 : Normalisation des paramètres
Cas d'usage : Différents clients utilisent des noms de paramètres distincts (comme
useridetuid). Unifiez-les sous le nom standarduser_id.Condition de correspondance :
http.request.uri.query contains "userid="-
Configuration de la réécriture :
Objet de la réécriture : Query string
Méthode d'opération : Dynamic
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 des chemins
Case 1
Cas d'usage : Supprimer les barres obliques superflues (comme
//) dans les URL dues à des erreurs de saisie.Remarque : La fonction
regex_replaceremplace uniquement la première occurrence dans la chaîne source.Condition de correspondance :
http.request.uri.path contains "//"-
Configuration de la réécriture :
Objet de la réécriture : Path
Méthode d'opération : Dynamic
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
Case 2
Cas d'usage : Réduire plusieurs barres obliques consécutives en une seule barre oblique. Exemple :
/path///download//image//user.jpg.Solution : Imbriquez plusieurs appels à
regex_replacepour remplacer progressivement les barres obliques consécutives.Condition de correspondance :
http.request.uri.path contains "//"-
Configuration de la réécriture :
Objet de la réécriture : Path
Méthode d'opération : Dynamic
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'usage : Retirer tous les paramètres de requête des ressources statiques. Par exemple, supprimer les chaînes de requête des URI se terminant par
.css.Condition de correspondance :
ends_with(http.request.uri.path, ".css")-
Configuration de la réécriture :
Objet de la réécriture : Query string
Méthode d'opération : Dynamic
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'usage : Éliminer les séquences numériques redondantes des chemins. Par exemple, retirer
123suivi de chiffres dans les chemins sous/example/.Condition de correspondance :
(http.request.uri matches "^/example/(.*)123[0-9]+(.*)$")-
Configuration de la réécriture :
Objet de la réécriture : Path
Méthode d'opération : Dynamic
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 de paramètres de chemin et ajout à la chaîne de requête
-
Cas d'usage : Extraire un segment de chemin dynamique, l'ajouter comme 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 Condition de correspondance : Toutes les requêtes entrantes
-
Configuration de la réécriture :
Objet de la réécriture : Path + Query string
Méthode d'opération : Dynamic
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'usage : Retirer des paramètres de requête précis. Par exemple, pour
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6, supprimez key2, key3, key5 et key6 afin de ne conserver que key1 et key4.Condition de correspondance : Toutes les requêtes entrantes
-
Configuration de la réécriture :
Objet de la réécriture : Query string
Méthode d'opération : Dynamic
Expression :
regex_replace(regex_replace(regex_replace(regex_replace(http.request.uri.query, "(&?key2=[^&]*)", ""), "(&?key3=[^&]*)", ""), "(&?key5=[^&]*)", ""), "(&?key6=[^&]*)", "")RemarqueChaque appel imbriqué à
regex_replacesupprime un paramètre. Le motif(&?keyN=[^&]*)capture le caractère&précédent afin d'é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'usage : Conserver uniquement certains paramètres de requête. Par exemple, pour
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4, ne gardez que key1 et key4.Condition de correspondance : Toutes les requêtes entrantes
-
Configuration de la réécriture :
Objet de la réécriture : Query string
Méthode d'opération : Dynamic
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 la valeur de chaque 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