Pages : 1
#1 Le 19/05/2020, à 15:31
- rhiwotar
Nginx rewrite et blocage a cause de regex
Bonjour,
L’équipe Web de mon entreprise me demande de rediriger certains liens de l'ancien site vers le nouveau. Sur une liste d'environ 500 redirections, il y en a qui coince et leurs point communs sont soit "?" soit "+" soit " "
exemple,
rewrite ^/pourquoi mettre des espaces dans un liens? https://www.nouveau-site.com/pourquoi_mettre_des_espaces/ permanent;
rewrite ^/lien/avec+des+symboles+chiant?/= https://www.nouveau-site.com/lien/avec_des_symboles permanent;
Je pense que les symboles sont traités comme des requetes regex mais je veux pas
J'ai tenté de mettre des quotes et double quotes, ça change rien,
rewrite '^/pourquoi mettre des espaces dans un liens?' https://www.nouveau-site.com/pourquoi_mettre_des_espaces/ permanent;
rewrite "^/lien/avec+des+symboles+chiant?/=" https://www.nouveau-site.com/lien/avec_des_symboles permanent;
J'ai tenté l'encodage avec les poucents %20 %3F, ça n'a rien changé
Soit c'est moi qui m'y prend mal, soit c'est pas ces solutions qu'ils faut utiliser,
Merci d'avance pour votre aide à ce sujet.
Hors ligne
#2 Le 19/05/2020, à 16:34
- bruno
Re : Nginx rewrite et blocage a cause de regex
Bonjour,
En l'occurrence il s'agit de réécriture d'URI (pas de liens).
Ce que tu appelles des « symboles chiants » sont des caractères qui ont un sens particulier dans une expression régulière.
Nginx utilise la syntaxe des regexp Perl.
https://www.nginx.com/blog/creating-ngi … ite-rules/
https://perldoc.perl.org/perlre.html
#3 Le 20/05/2020, à 08:00
- rhiwotar
Re : Nginx rewrite et blocage a cause de regex
Bonjour,
Merci pour la réponse.
J'essaie de neutraliser les métacaractères sans succès, j'ai aussi tenté le backslash et mes liens ne sont pas réécrit même pas partiellement
Hors ligne
#4 Le 20/05/2020, à 08:30
- bruno
Re : Nginx rewrite et blocage a cause de regex
Il faut donner un exemple concret de ce que tu as fait et des erreurs obtenues.
Ex rediriger /index.php?foo=bar vers https://example.com/index.php?foo=bar :
rewrite "^/(index.php\?foo=bar)" https://www.nouveau-site.com$1
ou bien
rewrite "^/index.php(\?foo=bar)" https://www.nouveau-site.com/index.php$1
Ex rediriger /index.php?foo=bar vers https://example.com/foo/bar
rewrite "^/index.php(\?foo)=(bar)" https://www.nouveau-site.com/$1/$2
N.B.: je n'ai pas testé ces règles, elles peuvent donc contenir des erreurs et ne pas fonctionner du tout.
Dernière modification par bruno (Le 20/05/2020, à 08:32)
#5 Le 20/05/2020, à 11:29
- rhiwotar
Re : Nginx rewrite et blocage a cause de regex
Pour les liens avec des +, j'ai résolu avec (.?) me reste plus que 10 liens avec ? et espace à résoudre
En précision, les liens avec espaces ont tous des ? mais l'inverse n'est pas vrai, si je résout les ? il me restera que 3 liens avec espaces
Le lien d'origine : www.ancien-site.com/?q=test
Les tests
rewrite ^/?q=test https://www.nouveau-site.com\test permanent;
rewrite '^/?q=test' https://www.nouveau-site.com\test permanent;
rewrite "^/?q=test" https://www.nouveau-site.com\test permanent;
rewrite "^/(.?)q=test" https://www.nouveau-site.com\test permanent;
rewrite "^/(\?)q=test" https://www.nouveau-site.com\test permanent;
rewrite "^/(\?q)=(test)" https://www.nouveau-site.com\test permanent;
rewrite "^/(\?q=test)" https://www.nouveau-site.com\test permanent;
rewrite "^/(.+)q=test" https://www.nouveau-site.com\test permanent;
Pour les liens avec espaces, j'ai mis (\s)
Dernière modification par rhiwotar (Le 20/05/2020, à 13:24)
Hors ligne
Pages : 1