Version complète: sur le forum Webmaster Hub : caracteres speciaux et url rewriting
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
invader-u
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
TheRec
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 wink.gif

Je pense que cette expression devrait te convenir...
CODE
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 :
CODE
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...
invader-u
Bonjour,

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

J'ai bien une regles comme la tienne :
CODE
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 :
CITATION
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
CITATION
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 ...
TheRec
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 ...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.