Aller au contenu

Sujets conseillés

Posté

Bonjour,

Suite a une erreur de script generant mes url rewritees, j'ai eu quelques urls bizarres indexees.

Je voudrait corriger ca avec une redirection 301, mais je n'y arrive pas.

Par exemple :

3458_du%2Fspam.htm ---> index.php?var1=3458

32236_~*-__mot_aaaa_bb_%E0_ccc__%00*~.htm ---> index.php?var1=32236

j'utilise bien .* mais . ne remplace pas les % et peut etre les ~ et *

dans le premier exemple, j'ai essaye une regle du genre :

([0-9]*)_.*\%.*\.htm

et

aussi

([0-9]*)_.*\%2F.*\.htm

mais aucune des 2 regles ne fonctionne.

Auriez vous une idée

Posté

Bonsoir,

les caractères spéciaux ne sont pas autorisés dans les URL...en l'occurence dans ton URL exemple tu utilises l'astérisque (*) et sauf si elle est encodée (%2A) elle ne fera que causer une erreur 400 Bad Request...

Pour le pourcent (%), c'est différent, comme il est utilisé pour encoder les caractères il ne provoque pas cette erreur, mais tant qu'une combinaison hexadécimale ne le suit pas il est ignoré...

Pour répondre à ta question, l'expression (.*) va englober les caractères encodés..donc il n'y a pas besoin de les identifié autrement...évidemment il n'englobera pas l'astérisque à moins qu'elle soit encodée ;)

Je pense que cette expression devrait te convenir...

RewriteRule ^([0-9]+)_(.*)\.htm$ index.php?id=$1 [L]

Cela redirige toutes les URL commençant par un id d'au moins un chiffre suivi d'un underscore (_) et se terminant par .htm .

Si tu ne veux rediriger que les URL contenant des caracètres spéciaux, ce qu'il faut savoir c'est que le serveur HTTP analyse l'URL une fois décodée...donc %E0 dans ton exemple correspond à "à" ...tu peux utiliser les caractères usuels et inverser la classe cela représentera tous les caractères autres que alphanumériques :

RewriteRule ^([0-9]+)_(.*)[^a-zA-Z0-9]+(.*)\.htm$ index.php?id=$1 [L]

Dans ce cas là, les URL commençant par un id d'au moins un chiffre suivi d'un underscore (_) et de n'importe quel caractères puis au moins un caractère ne correspondant pas à la classe et se terminant par .htm ... ce n'est pas très propre mais je n'ai pas vraiement trouvé de solution qui permet de faire ceci autrement...

Posté

Bonjour,

Tout d'abord, je te remercie de m'aider.

J'ai bien une regles comme la tienne :

RewriteRule ^([0-9]*)_(.*)\.htm index.php?var1=$1[L]

elle se trouve dans le .htaccess du repertoire "monrep"

Et quand je demande l'URL http://www.mondomaine.com/monrep/3458_du%2Fspam.htm

J'ai le message d'erreur suivant :

Not Found

The requested URL /monrep/3458_du/spam.htm was not found on this server.

Concernant ta deuxieme regle, j'obtiens pour :

http://www.mondomaine.com/monrep/32236_~*-..._ccc__%00*~.htm

Not Found

The requested URL /monrep/32236_~*-__mot_aaaa_bb_à_ccc__ was not found on this server.

Merci quand meme.

et si tu as d'autres idees ...

Posté

Effectivement, j'aurais du faire le test ailleur que sous Windows...ça m'apprendra à parler trop vite... C'est une restriction liée à Windows de ne pas pouvoir utiliser de symboles tels que l'astérisque dans des nom de fichiers ou répertoires... pardon.

Je ne vous pas vraiement d'autres explication que celle que j'ai évoquée précédemment... mod_rewrite travaille sur l'URL une fois celle ci décodée..et l'entité %2F correspondant au "slash" il n'arrive pas à faire correspondre l'expression...mais pourquoi, j'avoue que je n'ai pas les idées très clair maintenant...peut-être que ça videndra plus tard, mais peut-être que quelqu'un d'autre aura une réponse à ce problème ...

  • 7 years later...
Posté

Bonjour Invader-U je sais que ce posts est un peu ancien, mais aujourd'hui je me retrouve confronté au même proplème que toi.



J'ai des URLS type %2F qu il' m est impossible de rediriger via le .ht access, as tu trouvé la solution?



Merci


Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...