comment enlever les ?id=1 aux URL pour éviter les duplicat content ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je suis débutant en PHP, je suis en train de créer un petit site pour un ami, et je suis en train de lui faire un admin (mini CMS). Et j'ai un problème qui me bloque. Je souhaite avoir des URL sans les points d’interrogations. Hier j'ai passé toute la journée dessus, mais je n'y arrive pas. Donc j'ai besoin d'aide SVP.

Avant mes articles avaient comme URL ceci par exemple : http://www.mon-site/article.php?url=testurl

Mais je veux des url comme ceci par exemple: http://www.mon-site/testurl

J'ai donc ajouté ce code dans dans mon .htaccess :

1
RewriteRule ^([a-zA-Z0-9-]+)$ article.php?url=$1 [L]

_Est-ce déjà bien comme ceci qu'il faut d'abord faire? en faisant tout d'abord une règle général de ré-écriture dans un .htaccess ?

En fait, mes pages sont bien disponibles quand je tape dans le navigateur les nouvelles URL. Mais quand je tape dans le navigateur les anciennes URL (par exemple: http://www.mon-site/article.php?url=testurl) , mes page sont aussi encore disponibles, ce qui risque d’être problématique avec Google et les duplicate content…

Comment faut-il faire pour que mes pages soient disponibles uniquement avec les nouvelles URL ? Hier dans Google j'ai lu que c'était peu être possible en PHP avec $_SERVER['PHP_SELF'] ou $_SERVER['REQUEST_URI']), ou je ne sais pas trop quoi d'autre, mais je comprend rien.

Est-ce possible de m'expliquer comment faire (avec du langage de débutant)?

Merci beaucoup

Édité par Coyote

+0 -0

Google peut visiter l'url non ré-écrite si celle-ci est référencée quelque part dans une page, comme le dit Xalfen. Cette URL étant la vraie URL il est impossible de la rendre inaccessible sinon l'url ré-écrite n'y aura pas non plus accès.

+2 -0
Auteur du sujet

Bonjour, merci à tous pour vos réponses, de coup quelqu'un m'avais dit de faire ceci:

1
2
3
4
5
6
// si on trouve ?url= dans l'url, alors on fait une redirection 301 vers le contenu de la variable.
if (strpos($_SERVER['REQUEST_URI'], '?url=') != false)
{                                               
     header('Location:'.$_GET['url'], true, 301);
     exit();
}

Je ne sais pas si ça fait pro, mais quand quelqu'un essaye d'aller à l'ancienne url avec les ?, il est redirigé vers la nouvelle. merci a+

+0 -0

Dans ton URL rewriting je rajouterai plutôt un paramètre "isRewriting" soit en variable d'environnement (voir la doc) article.php?url=$1 [L,env|E=isRewriting:1] ou en GET page.php?id=$1&isRewriting=1. Et si il n'est pas présent tu fais ta redirection.

Je trouve que c'est une solution plus "stable", si ta regex vient à évoluer ou si le nombre de paramètre augmente.

PS : Je ne suis pas sûr de la syntaxe pour la variable d'environnement.

+0 -0
Staff

Un truc con, mais au lieu de s'emmerder avec des ré-écritures d'URL, pourquoi ne pas bêtement utiliser la meta canonical ? C'est facile à utiliser et à mettre en place et ça évite des redirections inutiles (y compris pour les visiteurs : sur mobile ça peut parfois prendre du temps une simple redirection)

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte