Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FAIRE DE LA RÉÉCRITURE D'URL SANS LE MOD_REWRITE


Information sur la source

Catégorie :Astuces Niveau : Initié Date de création : 31/01/2004 Vu : 6 238

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

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

  • // 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;
  • }
  • }
// 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.
 

Commentaires et avis

signaler à un administrateur
Commentaire de iubito le 02/02/2004 08:46:08

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

signaler à un administrateur
Commentaire de Hellway le 02/02/2004 12:23:34

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...

signaler à un administrateur
Commentaire de perig le 10/10/2004 11:32:48

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 !!!!

signaler à un administrateur
Commentaire de dom_ponge le 05/08/2006 02:16:22

Sa ne marche jamais vos affaire de Url Rewriting avec les 404.

signaler à un administrateur
Commentaire de safamine le 14/10/2007 15:15:46 10/10

ca marche merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.