Posté le 02 Décembre 2006 à 16:42
Le mod_rewrite d'apache n'est pas disponible chez Free mais j'ai fais en sorte d'avoir quand même de jolies url pour ce site. Je vais dans cet article vous expliquer comment fonctionne mon système de pseudo url rewriting.Attention : il faut avoir des bases au moins en PHP pour comprendre cet article, il n'est pas destiné aux débutants !
Mise à jour le 18/03/2007 : J'ai posté un article plus récent avec une nouvelle méthode d'url rewriting chez Free qui utilise le MultiViews et qui a comme avantage de ne plus avoir besoin du ? dans l'url (voir la seconde partie de l'article).
1/ Pourquoi ?
Le but premier est que les url soient significatives car pour la plupart des moteurs de recherches l'url est une source de mot-clefs.L'autre but est d'avoir de jolies url pour le visiteur.
2/ Le choix de la méthode
Il y a en effet deux méthodes possibles :- Utiliser une page d'erreur 404.
- Faire passer l'url en arguments à un script.
Ce n'est pas la solution que j'ai choisi, simplement parce que j'ai lu je ne sais plus où que ça n'est pas terrible pour le référencement : certains moteurs de recherches ne vont pas indexer les pages d'erreurs 404.
J'ai donc choisi de faire passer l'url en argument à un script php qui l'analyse et affiche la page voulue.
3/ La technique
Le mod_rewrite n'étant pas disponible, j'ai choisi de faire passer l'url réécrite comme un argument dans l'url, après le ? donc."/blog/post/URL-Rewriting-chez-Free.html"
pointe en fait vers la page index.php à la racine du site, qui elle se charge de récupérer les info présente dans l'url et d'afficher la page en question.
Pour faire cela, ce n'est pas bien compliquer, et on est grandement aidé par PHP qui nous fourni une variable prédéfini qui contient en fait la chaîne de caractère présente après le ? dans l'url qui a permis d'accéder à la page : $_SERVER['QUERY_STRING'].
Ce que je fais (enfin, ce que le script fait) ensuite, c'est de découper cette chaîne de caractère afin d'en récupérer les informations utiles.
Pour cela, j'utilise la fonction php explode qui coupe la chaîne en segments (entre chaque /). Ces valeurs sont ensuite rangées dans des variables puis le script affiche la page voulue, page qui peut se faire en fonction de ce que contiennent les variables.
4/ Le code
→ Code : url rewriting via un script php
1 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
if (substr($_SERVER['QUERY_STRING'], -5) == '.html') {
$_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 0, -5);
}
elseif (substr($_SERVER['QUERY_STRING'], -16) == '.html#addComment') {
$_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'], 0, -16);
}
$arg = explode('/', $_SERVER['QUERY_STRING']);
if (!isset($arg[1])) {
require('home.php');
}
elseif (strtolower($arg[1]) == 'blog') {
if (isset($arg[2]) && !empty($arg[2]) && isset($arg[3]) && !empty($arg[3])) {
$_GET[$arg[2]] = $arg[3];
}
if (isset($arg[4]) && !empty($arg[4]) && isset($arg[5]) && !empty($arg[5])) {
$_GET[$arg[4]] = $arg[5];
}
require('blog.php');
}
elseif (strtolower($arg[1]) == 'creations') {
require('creations.php');
}
elseif (strtolower($arg[1]) == 'contact') {
require('contact.php');
}
else {
require('home.php');
}
?>
Et voilà :-)
gloup gloup :
Alex :
Un ErrorDocument qui est une page PHP fera tout à fait l'affaire (il faut juste bien penser à forcer les header HTTP sur 200 OK)
url rewriting != mod_rewrite
Tom Miller :
j'adore votre site !
Tom Miller
Florent :
En effet ta solution est pas mal du tout....
Mais comment google voit-il tes URL? prend-il en compte l'URL réécrite ou l'ancienne pour son indexation ??
toto :
$_GET. Mais va voir la nouvelle méthode (linké en haut d'article et sur le commentaire au dessus, c'est plus propre :-).renault :
J'ai essayer:
header("Status: 301 Moved Permanently", false, 301);
header('Location: '.$newurl);
Mais j'ai pas l'impression que ca marche!!!
Si quelqu'un a la solution HELP ME
header('301 Moved Permanently'); header('Location: '.$newurl); exit;gilles :
Merci pour les tutos !!
Ça marche chez moi, aussi bien dans le commentaire en question que dans l'article.