invader-u Posté 6 Avril 2006 Posté 6 Avril 2006 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 Posté 7 Avril 2006 Posté 7 Avril 2006 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...
invader-u Posté 7 Avril 2006 Auteur Posté 7 Avril 2006 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 ...
TheRec Posté 7 Avril 2006 Posté 7 Avril 2006 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 ...
Kalou Posté 2 Juin 2013 Posté 2 Juin 2013 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant