Quel urlrewriting avec $args ?

WRInaute accro
Bonjour

Je cherche à faire l'urlrewriting d'une page appelée avec des paramètres précis, mais produits par une form html, donc il est quasiment impossible de savoir l'ordre des paramètres.

Le paramètre PARAM[] se présente donc comme ceci : PARAM%5B%5D , et je fait un map.

Il peut y avoir plusieurs PARAM[] dans la $querystring.

Le troisième map c'est pour fixer l'ordre des paramètres, et traduire $args en un string et les paramètres séparés par #.

Actuellement, rien ne passe, l'urlrewriting ne se fait pas.

Pouvez-vous m'aider à mettre au point cet urlrewriting ?

Merci beaucoup.



Code:
    map (%5B|%5D) $brackets {
        %5B [;
        %5D ];
    }

    map $args $argsfromparams {
        PARAM$brackets$brackets=\d+ PAR[]=$arg_PARAM;
        default $args;
    }
       
    map $args $argsfromargs {
        ^(?:(ENTIERS=[\dt.-]+|MODE=\d|REDIRECT=\d|TEND=\d|PARAM$brackets$brackets=\d+|TAB_P=[\d.]*|AFFIC=\d|FIRST_PERIODE=\d+|LAST_PERIODE=\d+)&?)+$ ENT=$arg_ENTIERS#MO=$arg_MODE#RED=$arg_REDIRECT#TEN=$arg_TEND#TAB=$arg_TAB_P#AFF=$arg_AFFIC#FIRST=$arg_FIRST_PERIODE#LAST$arg_LAST_PERIODE#$argsfromparams;
        default $args;
    }
 
Dernière édition:
Nouveau WRInaute
Bonjour,

map (%5B|%5D) $brackets {
%5B "[";
%5D "]";
}

# Extraction des paramètres PARAM[]
map $args $argsfromparams {
~*PARAM\[\]=(\d+)(&|$) "PAR[]=$1";
~PARAM\[\]=(\d+)&(.)$ "PAR[]=$1#$argsfromparams";
default "";
}

# Réorganisation des paramètres dans l'ordre souhaité
map $args $argsfromargs {
~^(?:(ENTIERS=([^&]+)|MODE=(\d+)|REDIRECT=(\d+)|TEND=(\d+)|TAB_P=([^&]+)|AFFIC=(\d+)|FIRST_PERIODE=(\d+)|LAST_PERIODE=(\d+))&?)$ "ENT=$arg_ENTIERS#MO=$arg_MODE#RED=$arg_REDIRECT#TEN=$arg_TEND#TAB=$arg_TAB_P#AFF=$arg_AFFIC#FIRST=$arg_FIRST_PERIODE#LAST=$arg_LAST_PERIODE#$argsfromparams";
default $args;
}

# Règle de rewriting
location /votre-page-origine {
rewrite ^/votre-page-origine$ /nouvelle-page?$argsfromargs permanent;
}


Plusieurs erreurs :


  1. Problème de syntaxe dans la map $brackets : Les crochets étaient notés avec un point-virgule plutôt qu'avec des guillemets. J'ai remplacé [; par "[" et ]; par "]".
  2. Traitement des paramètres multiples PARAM[] : Votre configuration ne capturait pas correctement les multiples occurrences de PARAM[]. J'ai ajouté une expression régulière récursive pour traiter ce cas.
  3. Expression régulière trop restrictive : Votre regex dans la dernière map était trop rigide et n'acceptait que des valeurs numériques pour certains paramètres. J'ai assoupli les contraintes pour accepter plus de formats.
  4. Absence de règle de rewriting finale : J'ai ajouté une directive location avec la règle rewrite qui utilise le résultat des maps.
  5. Correction de la concaténation : Dans la dernière map, il manquait un signe égal pour le paramètre LAST : #LAST$arg_LAST_PERIODE devrait être #LAST=$arg_LAST_PERIODE.
 
WRInaute accro
Bonjour site-voyance

La récursion ne semble pas se faire.

Le paramètre PARAM[]=1 est le seul PARAM[] urlrewrité.

Je ne sais pas comment faire un map récursif.

Merci beaucoup de ton aide.

Sinon, j'ai remplacé les dièzes par des deux points ( : ).

Voici les logs sous localhost.



Code:
=> avant rewriting : 127.0.0.1 - - [01/Apr/2025:19:01:51 +0200] "GET /courses-lendemain/pronostics-courses.html?ENTIERS=1-2t3t1t2.2056t0.0304&MODE=1&REDIRECT=1&TEND=3&PARAM[]=1&PARAM[]=2&PARAM[]=3&TAB_P=1.2.3.4.5.6.7.8.9.10.11&AFFIC=1&FIRST_PERIODE=8098&LAST_PERIODE=8099 HTTP/1.1" 301 169 "-" "curl/8.9.1"

=> après rewriting : 127.0.0.1 - - [01/Apr/2025:19:01:51 +0200] "GET /pwa.php?type=LEND_STATENT=1-2t3t1t2.2056t0.0304:MO=1:RED=1:TEN=3:TAB=1.2.3.4.5.6.7.8.9.10.11:AFF=1:FIRST=8098:LAST=8099:PAR[]=1 HTTP/1.1" 200 8796 "-" "curl/8.9.1"


map :
*****

map (%5B|%5D) $brackets {
%5B "[";
%5D "]";
}

# Extraction des paramètres PARAM[]
map $args $argsfromparams {
        ~*PARAM\[\]=(\d+)(&|$) "PAR[]=$1";
        ~PARAM\[\]=(\d+)&(.)$ "PAR[]=$1:$argsfromparams";
        default "";
}

# Réorganisation des paramètres dans l'ordre souhaité
map $args $argsfromargs {
~(?:(ENTIERS=([^&]+)|MODE=(\d)|REDIRECT=(\d)|TEND=(\d)|TAB_P=([^&]+)|AFFIC=(\d)|FIRST_PERIODE=(\d+)|LAST_PERIODE=(\d+))&?)$ "ENT=$arg_ENTIERS:MO=$arg_MODE:RED=$arg_REDIRECT:TEN=$arg_TEND:TAB=$arg_TAB_P:AFF=$arg_AFFIC:FIRST=$arg_FIRST_PERIODE:LAST=$arg_LAST_PERIODE:$argsfromparams";
default $args;
}


Règle de rewriting
******************
location  = /courses-lendemain/pronostics-courses.html {

        root /;

        rewrite ^/courses-lendemain/pronostics-courses\.html$ /pwa.php?type=LEND_STAT$argsfromargs? permanent;
}
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut