Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Lecture du tutoriel

Simuler l'URL Rewriting chez Free

Avatar
Auteur : Thunderseb
Créé : le 28/04/2007 11:19:26
Modifié : le 11/08/2007 19:00:22
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Comme vous devez le savoir, l'URL Rewriting traditionnel (avec des directives Apache) ne fonctionne pas chez Free.

Je vous propose, dans ce mini-tuto, une solution simple pour faire comme si l'URL Rewriting fonctionnait. C’est relativement simple, mais comme on dit toujours après coup : "Fallait y penser". ^^
Sommaire du chapitre :

Introduction

Partons du principe que vous avez des URLs de ce type :

Code : Autre
1
http://moulesfrites.free.fr/?type=allumettes&pdt=frite


D'après cette URL et ces variables, on peut en déduire que la page demandée va parler de frites fines allongées préparées avec des pommes de terre à frites. Mon but est d'obtenir une URL comme ceci :

Code : Autre
1
http://moulesfrites.free.fr/?/allumettes-frite.html


C'est beaucoup plus joli, vous ne trouvez pas ?

Oui, mais c'est quoi ce point d'interrogation en plein milieu ?


C'est le seul petit défaut de la technique mais c'est aussi là que se situe tout la subtilité ^^ .

Analyse de l'URL

En réalité, tout ce qui se trouve après ce point d'interrogation est en quelque sorte le nom d'une variable get : la variable /allumettes-frite.html. L'URL exacte serait :

Code : Autre
1
http://moulesfrites.free.fr/index.php?/allumettes-frite.html


Cela veut donc dire que la page affichée sera la page index.php. Et c?est cette page qui va analyser l'URL de façon à simuler le rewriting :)

La page d'index

Dans un premier temps, il faut récupérer l'URL (enfin, ce qui se trouve après le point d'interrogation) :

Code : PHP
1
2
3
4
5
6
<?php
$VariableURL = $_SERVER['QUERY_STRING']; // Récupération de ce qu'il y a après le ?
if (substr($VariablesURL, -5) == '.html') { // On enlève le .html si il est présent
        $VariableURL = substr($VariablesURL, 0, -5);
}
?>


On teste aussi la variable, via substr, pour savoir si .html est présent (en toute logique, oui). S'il est présent, on l'enlève.

Maintenant, il s'agit de décomposer la chaîne en deux morceaux. Pour cela je vais utiliser explode (ça fonctionne de la même façon que la méthode split() de Javascript, pour ceux qui connaissent). Cette fonction coupe la chaine et crée un tableau avec les valeurs. Je vais couper au niveau du /.

Code : PHP
1
2
3
<?php
$Argument = explode('/', $VariablesURL);
?>




C'est bête, tu aurais pu utiliser substr aussi, non ?


Oui, c'est vrai, mais vous pourriez avoir une URL comme ça :

Code : HTML
1
<lien url="http://moulesfrites/?/recettes/moules-vinblanc.html">http://moulesfrites/?/recettes/moules-vinblanc.html</lien>


Dans ce cas, la fonction explode nous permet de couper la chaine en 3 :

  • $Argument[0] contiendra /
  • $Argument[1] contiendra recettes
  • $Argument[2] contiendra moules-vinblanc


Mais ça, je ne reviendrai pas dessus.


Après ça, on va couper $Argument[1]. Les points de coupe seront les tirets (-) :

Code : PHP
1
2
3
<?php
$SubArgument = explode('-', $Argument[1]);
?>


$SubArgument contiendra le tableau avec les différentes parties d'$Argument[1].

Il ne vous reste plus qu'à tester $SubArgument[0] pour savoir quelle page inclure (require pour un .php et readfile pour un .html) (avec des if ou un switch) :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
switch ($SubArgument[0]) {
        case 'allumettes':
                readfile('pages/types/frites_allumettes.html');
        break; 
        case 'maison':
                readfile('pages/types/frites_maison.html');
        break; 
        default:
                require('pages/accueil.php');
}
?>

Script complet

Voici un exemple de script :

Code : 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
<?php

$VariableURL = $_SERVER['QUERY_STRING'];

if (substr($VariableURL, -5) == '.html') {
        $VariableURL = substr($VariableURL, 0, -5);
}

$Argument = explode('/', $VariableURL);
if ($Argument[1]) {
        $SubArgument = explode('-', $Argument[1]);
        switch ($SubArgument[0]) {
                case 'allumettes':
                        readfile('pages/types/frites_allumettes.html');
                break; 
                case 'maison':
                        readfile('pages/types/frites_maison.html');
                break; 
                default:
                        require('pages/accueil.php');
        }
} else {
        require('pages/accueil.php');
}

?>

Bien entendu, dans vos pages incluses, vous pouvez ré-utiliser $SubArgument[i] pour exécuter vos scripts. Dans mon exemple, $SubArgument[1] contient frites. Vous pouvez mettre autant de SubArguments que vous le voulez, mais essayez de ne pas vous emmêler les pinceaux. ;)

N'oubliez pas aussi de mettre des messages d'erreur et tout s'il manque des choses. Je ne vous ai donné que le script de base. ;)
Auteur : Thunderseb
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 102 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0357s (0.0213s)