Aller au menu - Aller au contenu

Icône Simuler l'URL Rewriting chez Free

Mise à jour : 20/11/2008
Difficulté : Facile Facile
110 visites depuis 7 jours, classé 547/786
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 ». ^^

Introduction

Partons du principe que vous avez des URL 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 toute 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
$VariablesURL = $_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 s'il est présent.
        $VariablesURL = 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 chaîne et crée un tableau avec les valeurs. Je vais couper au niveau du /.

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


  • $Argument[0] contiendra /.
  • $Argument[1] contiendra allumettes-frite.


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 chaîne en trois :

  • $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 de $Argument[1].

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

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 s'il manque des choses. Je ne vous ai donné que le script de base. ;)

Partager

33 commentaires pour "Simuler l'URL Rewriting chez Free"
Note moyenne : 3.14 / 4 (7 votes)
Pseudo Commentaire
Hors ligne Neiss # Posté le 28/12/2009 à 16:25:34
Avatar

Ville : Breuillet
Pays : France métropolitaine

Où est-ce qu'on met tous ses codes ?

ee genre de code?

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
27
28
29
30
31
<?php
 
 
        $VariableURL = $_SERVER['QUERY_STRING'];
        if (trim($VariableURL))
        {
                $VariableURL = explode('/', $VariableURL);
                $VariableURL[1] = explode('.', $VariableURL[1]);
                $VariableURL[1][0] = explode('-', $VariableURL[1][0]);
                unset($VariableURL[0]);
                unset($VariableURL[1][1]);
 
 
                $Chemin0 = 'Config_Functions/';
                $Chemin1 = substr($_SERVER['SCRIPT_NAME'], 0, -9);
                $Chemin2 = $_SERVER['QUERY_STRING'];
 
 
                if (count($VariableURL) > 1 or count($VariableURL) < 1)                 {       header('Location: '.$Chemin1);                          exit(); }
                if (count($VariableURL[1]) > 1 or count($VariableURL[1]) < 1)   {       header('Location: '.$Chemin1);                          exit(); }
                if (!is_file($Chemin0.$VariableURL[1][0][0].'.php'))                    {       header('Location: '.$Chemin1);                          exit(); }
                if (ereg('index.php', $_SERVER['REQUEST_URI']))                                 {       header('Location: '.$Chemin1.'?'.$Chemin2);     exit(); }
        }
        else
        {
                $Chemin1 = substr($_SERVER['SCRIPT_NAME'], 0, -9);
                if (ereg('index.php', $_SERVER['REQUEST_URI']))                                 {       header('Location: '.$Chemin1);  exit(); }
        }
 
 
?>

Neiss


Citation:


;) Je suis jeune et je met toute les chances de mon coté :p
 
Hors ligne Jill-Jênn # Posté le 28/07/2010 à 12:34:50
大器晩成
Avatar
Flux RSS

Études : ENS Cachan

Pas logique ; pourquoi dis-tu « $Argument[2] contiendra moules-vinblanc. » puis « Après ça, on va couper $Argument[1]. Les points de coupe seront les tirets (-) : » ? Il vaudrait mieux couper $Argument[count($Argument) - 1].

« Quand on ne sait pas où on va, il faut y aller… et le plus vite possible. » — Les Shadoks
 
Hors ligne baudry # Posté le 09/11/2011 à 01:57:22

Bonjour Admettons que mon adresse soit http://totodesign.free.fr datant d'une certaine époque liée à mes études je me demandais s'il étaiit possible de faire de l'url rewriting ainsi : http://totomusique.free.fr ou encore http://totomusique.org est il possible de faire ainsi et dois je écrire un fichier .htacess
Hors ligne mariepp # Posté le 28/03/2012 à 11:28:56

Bonjour j’ai installé un site drupal sur mon ftp perso et je n’arrive pas à activer l’url aliases.

Mon site est en version 6 et j’ai uniquement trouvé des solutions pour drupal 5 permettant de simuler l’url rewriting.
Voici l’adresse de mon site : monsite/

Merci d’avance.
Hors ligne ori0N42 # Posté le 15/04/2012 à 11:52:17
Souriez...demain, ce sera pire
Avatar

Avis : Bon

Bon tuto, et effectivement : il fallait y penser ;)


"Un programme informatique fait ce que vous lui dites de faire, pas ce que vous voudriez qu'il fasse."
"C'est toujours quand les choses ne peuvent être pires qu'elles le deviennent.."
"C'est en imaginant que tout va nous tomber dessus que le pire reste "suspendu" jusqu'à ce qu'on imagine que plus rien ne peut nous arriver. "
"S'il y a la moindre possibilité que ça rate, ça ratera ; s'il n'y en a aucune, cela ratera quand même !"

 

Voir tous les commentaires
Ce tutoriel a été corrigé par les zCorrecteurs.