Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Hors ligne

#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)

Hors ligne

#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