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

stephweb13

WRInaute discret
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 :
Code:
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
 

rick38

WRInaute passionné
Plusieurs solutions, mais je propose ça :

Code:
if (strpos($_SERVER['REQUEST_URI'], '?url=') !== false)
{
     header('Location: /' . $_GET['url'], true, 301);
     exit();
}

Si on trouve ?url= dans l'url, alors on fait une redirection 301 vers le contenu de la variable.
 

stephweb13

WRInaute discret
rick38 a dit:
Plusieurs solutions, mais je propose ça :

Code:
if (strpos($_SERVER['REQUEST_URI'], '?url=') !== false)
{
     header('Location: /' . $_GET['url'], true, 301);
     exit();
}

Si on trouve ?url= dans l'url, alors on fait une redirection 301 vers le contenu de la variable.

Visiblement ça fonctionne, donc Parfait!
Exactement faut mettre ceci: header('Location: ' . $_GET['url'], true, 301);
(sans le: /) car avec ça me faisais descendre d'une catégorie.

Merci beaucoup.
 

Discussions similaires

Haut