[Résolu] - php - URL Rewriting chez free (free.fr)

michel.leonard

WRInaute occasionnel
Malgré l'absence du mod rewrite chez Free nous avons quand même la possibilité d'embellir nos adresse web grâce à un autre module apache appelé Multiview. Ce module permet d'accéder à un fichier sans mentionner son extension dans l'url. Grace à ceci et à une variable superglobale de PHP nous sommes en mesure de faire une réécriture d'adresse URL.

Dans une adresse du type http://webrank.free.fr/info/faire-url-rewriting-chez-free.html
Si le dossier info n'existe pas la page traitée sera info.php et servira à réécrire les URL.
Code:
<?PHP
$url = $_SERVER['PATH_INFO'];
?>
La variable url est une chaîne qui contiens "info/faire-url-rewriting-chez-free.html".

Le traitement peut se faire de multiples manières, par exemple avec explode() ou preg_match().
Code:
<?PHP
$get = explode("/", $url); 
?>
 

Sullyvan

WRInaute discret
Merci c'est exactement ce que je cherchais pour un site perso !

Il m'avait pourtant semblé avoir lu sur une newsgroup que l'url rewriting fonctionnait sur Free.fr mais c'était en 2002-2004 ça

Reco !
 

michel.leonard

WRInaute occasionnel
De rien, pour aller un peu plus loin avec les expressions régulières on peut faire comme suit , c'est un peu plus propre que explode, puisque les caractères comme "#@}]°..." ne sont pas tolérés...
Code:
<?php
preg_match("/^\/([a-z0-9\-_]+)(?:(?:\/([a-z0-9\-_]+))(?:\/([a-z0-9\-_\.]+)+)?)?\/?$/i",$_SERVER['REQUEST_URI'],$url);
?>
cette regexp match les url de cette façon :

http://monsite.free.fr/documentaires/39-45/bataille-atlantique.php

DANS LE FICHIER documentaires.php

$url[1]=documentaires
$url[2]=39-45
$url[3]=bataille-atlantique.php

cette regexp match uniquement les caracteres suivants A-Z (alphabet insensible a la casse) - (tirets) _ (tirets bas) . (points) 0-9 (chiffres) dans les adresses de profondeur 1 , 2 ou 3... Les points ne sont pas autorisés dans les noms des dossiers. En cas d'adresse invalide , $url[1] , $url[2] et $url[3] n'existent pas.

faites un :
Code:
<?
print_r($url);
?>
pour tester...
 

stef13100

Nouveau WRInaute
excuser moi une question a la fin du code la redirection est elle:

header("HTTP/1.0 200 OK"); // Faut-il un 200 ou un 301 ???
header('Location: '.$newurl);
 

michel.leonard

WRInaute occasionnel
mais il n'y a pas de redirection a la fin du code, c'est normalement a toi d'inclure les bons fichiers en fonction du parametre $url... tu comprends ? les dossiers et les pages sont virtuels...
 

stef13100

Nouveau WRInaute
oui merci j'ai compris mais j'ai mis la solution car les tutos font penser que l'on peux faire

header("HTTP/1.1 301 Moved Permanently");
header ('location: http:/ton-url.com);

mais le serveur free renvoi un 302 qui n'est pas référencer
 

michel.leonard

WRInaute occasionnel
effectivement, on pourrais faire une 301, mais ca provoquerai une boucle de redirection... grace a l'expression rationelle, tu es déja dans la page que tu veux rediriger; bien sur chez free, le dossier virtuel est obligatoire pour cet url rw...
 

olikhvar

Nouveau WRInaute
J'ai la meme problem.

1.je veux mon site doit afficher monsite.free.fr/dossier1/index à la place de monsite.free.fr/dossier1/index.php
2. pareil monsite.free.fr/dossier11/index2?var1=x&var2 a la palace de monsite.free.fr/dossier11/index2.php?var1=x&var2

comment a faire pouvez m'expliquer plus clairement svp?

Merci d'vance.
 

Discussions similaires

Haut