Faire de la réécriture d'url sans le mod_rewrite

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 419 fois - Téléchargée 25 fois

Contenu du snippet

Dans certains hébergeurs il n'y pas la possibilité d'utiliser l'url rewriting, et c'est bien dommage... Car l'url rewriting permet, entre autre, d'avoir un référencement de première classe dans les moteurs de recherche qui n'indexent pas les page contenant du CGI (à part google, mais pas plus de deux valeurs).

Bref, ce petit bout de code, fais exactement la même chose.

D'abord, créer un fichier .htaccess sur la racine de votre site contenant ceci :
ErrorDocument 404 /Site/index.php?Rub=Erreur&Act=404

Puis, créer vos liens avec la fonction Lien de cette manière :
<a href="<? echo Lien("Rub", "Article", "Act", "Lire"); ?>" title="Lire">Article 1</a>

Et enfin, insérer la fontion Lien()
Et le petit bout de script dans votre fichier index.php...

Source / Exemple :


// Réécrire les url ou pas
$URLReecrire=true;
// Cookies acceptés par le client ou pas
$AccepteCookie="true";

// Récupération des variables passés par url reformée
if(($URLReecrire)&&($Act=="404"))
{
header("Status: 200 OK");
$Act="";
if(!isset($_SERVER['REQUEST_URI']))
{
$_SERVER["REQUEST_URI"] = substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1);
}

$URL = explode ( ".", $_SERVER["REQUEST_URI"]);
foreach($URL as $V)
{
if (ereg ("([^/][a-zA-Z0-9]+)-([a-zA-Z0-9]+)", $V, $Val)) { $$Val[1]=$Val[2]; echo $$Val[1]; echo $Val[2];}
}
}

// Fontion de formation des URL
if($URLReecrire)
{
function Lien()
{
global $CookieAccepte;
global $Id;
global $Lang;
$Url="";
$NbArgument = func_num_args();
$Argument = func_get_args();
	for ($i = 0; $i < $NbArgument; $i++)
	{
	if ($Argument[++$i])
		{
		if ($i>"1") { $Url .= "."; }
		$Url .= $Argument[--$i] . "-" . $Argument[++$i];
		}
	}
	if(!$CookieAccepte)
	{
	$Url .= "_Lang-$Lang";
	if($Id) { $Url .= "_Id-$Id"; }
	}
	$Url .= ".html";
return $Url;
}
}
else
{
function Lien()
{
global $CookieAccepte;
global $Id;
global $Lang;
$Url = "?";
$NbArgument = func_num_args();
$Argument = func_get_args();
	for ($i = 0; $i < $NbArgument; $i++)
	{
	if ($Argument[++$i])
		{
		if ($i>"1") { $Url .= "&amp;"; }
		$Url .= $Argument[--$i] . "=" . $Argument[++$i];
		}
	}
	if(!$CookieAccepte)
	{
	$Url .= "&amp;Lang=$Lang";
	if($Id) { $Url .= "&amp;Id=$Id"; }
	}
return $Url;
}
}

Conclusion :


Les varialbes $Lang et $Id sont mises dans des cookies, mais si le visiteur n'a pas activé les cookies, je les fais passer via l'url par la méthode GET.

Sinon, si vous laissez UrlReecrire à false, alors, la fonction lien créera des Url normales en CGI.

L'intérêt de ce script n'est pas à prouver, mais sachez qu'à mon grand désarroi, ce script ne marche pas sur free, mais chez moi, en local, tout tourne à merveille. Essayer chez multimania ou autre hébergeurs gratuits (voire payants) peut être une bonne idée.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
14 octobre 2007

ca marche merci
Messages postés
47
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 septembre 2006

Sa ne marche jamais vos affaire de Url Rewriting avec les 404.
Messages postés
358
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
5 septembre 2006

J'ai voulu utiliser ce principe sur mon site (c'est pas ton script mais c'est le meme principe avec le 404) et ca marche.
Le prob est que toutes mes pages ont pour titre "Erreur 404" ce qui me conviens assez mal et j'arrive pas a redéfinir le titre !!!!
Messages postés
37
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
2 août 2004

Non, malheureusement, et je sais pas trop pourquoi... Chez moi, en local, la redirection des erreurs fait que dans mon $_SERVER['REQUEST_URI']; j'ai l'URL qui a provoqué l'erreur, chez free, t'as l'URL de rediredtion et tu peux pas en faire cgrand chose...
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

merde ça marche pas sur free tu dis :'(

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.