Remplacement & par & avec htacess

Nouveau WRInaute
Bonjour

j'ai un site avec des url du style :
http://www.mosite.com/index.php?page=page-demandee&id=n

Il arrive parfois que des visiteurs arrivent sur mon site avec des url incluant l'esperluette codée :
http://www.mosite.com/index.php?page=page-demandee&id=n
pour des raisons que j'ignore.
Ils tombent alors sur une page leur indiquant que le système a rencontré une erreur; et c'est ce qui me gêne le plus dans cette histoire.

Est il possible de créer un règle dans le fichier htacess permettant de réécrire les url incluant & pour les mettre comme il faut &
Merci pour toute aide.
 
WRInaute discret
Bonjour,

une solution élégante avec htaccess m'intéresse aussi :D
Pour rediriger les urls contenants des & vers &, j'utilise le bricolage suivant :
début de index.php:

foreach($_GET as $variable => $value) {
$_GET[str_replace('amp;','',$variable)] = $value;
}

As tu trouvé une solution plus élégante ?
 
Nouveau WRInaute
Bonjour
Merci pour vos réponses

Le problème ne concerne pas une url en particulier, il peut apparaitre sur n'importe quelle url du site.
C'est la raison pour laquelle je ne peux pas définir une règle pour chaque url.

C'est assez rare, je ne comprends pas pourquoi des visiteurs arrivent sur le site avec des url pareilles.

Mon objectif serait d'éliminer ce genre de problèmes, car quand les gens trouvent votre site parmi des milliers et qu'ils atterrissent sur une page d'erreur, c'est très moyen comme première impression.
 
WRInaute discret
@Djibou_Te@M, merci pour l'exemple. Le nombre de paramètre est variable dans l'URL. Pas facile de trouver une règle de réécriture.

De mon coté:
- les '&' dans les URL vient du sitemap soumis à Google,
- Apache ne dirigent pas ces URL vers un 404, en fait, ce sont les noms de paramètres incorrectes dans la variable $_GET qui mène à une erreur.

L'erreur est provoquée à quel niveau chez toi ?
 
Nouveau WRInaute
Merci Fobec, j'ai essayé ton code qui marche impec , je l'utilserais en attendant une solution via htacess.

Pour les urls dans le sitemap elles contiennent forcement des & (xml oblige), le trafic avec les esperluettes codées ne vient pas de google, mais je pense plutôt a des bots bidons qui fouinent dans le sitemap et qui l'interprettent mal.

Idem pour moi, L'erreur est provoquée du fait que la variable d'url (dans notre cas de figure) n'est plus id mais amp;id .

Avec ton code je n'ai plus cette erreur.
 
WRInaute passionné
Je pense qu'une règle de ce type doit marcher :
Code:
RewriteCond %{QUERY_STRING} ^(.*)&(.*)$
RewriteRule ^(.*)$ /$1?%1&%2 [L,R=301]

la solution php reste la plus simple mais je mettrais plutôt un remplacement de "amp;" que s'il se trouve en début du nom.
 
Discussions similaires
Haut