[Contribution] - Développer un module de réécriture avec PHP

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

[Contribution] - Développer un module de réécriture avec PHP

Message le Sam Oct 23, 2004 22:09

L'astuce consiste à rediriger les erreurs 404 vers ce script (si vous ne possédé le module de réécriture). Ca peut arranger vos affaire ! Si une des conditions de réécriture n'est pas rempli le script va renvoyer une erreur 404 Not Found sinon un code 200 OK et afficher le fichier concerné par la variable $FILE de la fonction AddRewrite. Bon j'm'étale pas plus sur le sujet si vous avez des questions posez les :-D

PS : Ne marche pas sur Free, non pas parce que le script ne passe pas, mais parce que sur Free il est impossible de modifier le code HTTP de réponse du au faite que le fichier htaccess passe d'abord par une saloperie de script perl...

Code: Tout sélectionner
<?php
   // my-Eldorado.net Interactive
                     header('HTTP/1.0 200 OK');
   $CallURL404 = $_SERVER['REQUEST_URI'];

   function AddRewrite($ID, $REGULAR, $FILE, $VARS) {
      $GLOBALS['RewriteRule'][$ID] = $REGULAR;
      $GLOBALS['RewriteURLTarget'][$ID] = $FILE;
      $GLOBALS['RewriteVarsTarget'][$ID] = $VARS;
   }
   
   AddRewrite(0,"`/([a-z]+)/produit-([0-9]+).php`", "index.php", "\$langID=$1; \$id=$2;");
   AddRewrite(1,"`/([a-z]+)/`", "index.php", "\$langID=$1;");
   AddRewrite(2,"`/([a-z]+)/([^.]+).php`", "$2.php", "\$langID=$1;");
   $i = 0;
   $CountRewrite = 0;
   while ($i <= sizeOf($RewriteRule)-1) {
      $Mod[$i] = preg_match_all($RewriteRule[$i],$CallURL404,$RewriteOut[$i], PREG_PATTERN_ORDER);
      $CountRewrite = $CountRewrite + $Mod[$i];
      $i++;
      }

   if ($CountRewrite == 0) {
         echo "0";
         header('HTTP/1.x 404 Not Found'); // 404
         exit;
      }
      
   $i = 0;
   $RewriteVars = "";
   while ($i <= sizeOf($RewriteOut)-1) {
      
      if ($Mod[$i] != 0) {
         
         if ($RewriteVars == "") {
            $RewriteVars = $RewriteVarsTarget[$i];
         }
         $j = 1;
         $REDIRECT = $RewriteURLTarget[$i];
         while ($j <= sizeOf($RewriteOut[$i])-1) {
            $RewriteVars = str_replace('$'.$j,$RewriteOut[$i][$j][0], $RewriteVars);
            $REDIRECT = str_replace('$'.$j,$RewriteOut[$i][$j][0], $REDIRECT);
            $j++;
         }
      }
      $i++;
   }
   
   eval($RewriteVars);
   if (file_exists($REDIRECT) == True) {
      //RewriteLog($RewriteOut[$i-1][0][0], $REDIRECT."?".$RewriteVars);
      header('HTTP/1.0 200 OK');
      include($REDIRECT);
      } else {
         echo $REDIRECT;
         header('HTTP/1.x 404 Not Found'); // 404
         exit;
      }
      
   function RewriteLog($REWRITE, $PARAMS) {
      $log = fopen('rewrite_log.txt','r+');
      $PARAMS = str_replace("$","",$PARAMS);
      $PARAMS = str_replace(";","&",$PARAMS);
      $contenu_original = fread ($log, 2500000);
        $retour="\n";
        $nouveau_contenu=date('d:m:Y h:i:s')." - ".$REWRITE." REWRITED BY ".substr($PARAMS,0,strlen($PARAMS)-1).$retour.$contenu_original;
        rewind($log);
        fputs ($log, $nouveau_contenu);
      fclose($log);
   }
?>


GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Sam Oct 23, 2004 22:26

Juste une chose, dans le cas de Free, lorsque l'on definit une page 404 dans le .htaccess documenterror 404 /404.php par exemple
Et bien lorsqu'il y a une 404, le .htaccess indique de passer par le fichier 404.php en indiquant un code 302 (et non le code 404 ) -> 404.php ...
Donc en gros, tu aura dans les codes 302 -> 200 ou 302 -> 404 ...
PAr exmple mon site , et l'outil WRI header :
Voici le contenu de l'entête HTTP renvoyé par votre serveur (URL analysée : 'http://gaming.zone.online.fr/chemin_bido
n/fichier_bidon.htm') :

HTTP/1.1 302 Found
Date: Sat, 23 Oct 2004 21:12:46 GMT
Server: Apache1.3.29 - ProXad [Oct 19 2004 22:06:5
1]
Location: -http://gaming.zone.online.fr/404.php
Content-Type: text/html; charset=iso-8859-1

Donc c'est bien ce cassé la tete pour rien (pour de l'url rewritting transparent ), quite a faire une 302 , autant utilisé un redirect !
Attention, je ne connais que le cas pour mon site, et troops indique bien que ce n'est pas pour free, CEPENDANT, j'aimerais bien voir la reponse HEADER du site de troops, pour le meme chemin_bidon\fichier_bidon.htm pour voir si on a le meme code de rediredtion vers la 404
Dernière édition par GAMING ZONE le Sam Oct 23, 2004 22:30, édité 1 fois.

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Sam Oct 23, 2004 22:29

Je parle des hebergements gratuit


GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Sam Oct 23, 2004 22:30

excuse j'ai edité le message precedent ... relis !

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Sam Oct 23, 2004 22:32



GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Sam Oct 23, 2004 22:45

ok tu as bien a 200, cependant,
Voici le contenu de l'entête HTTP renvoyé par votre serveur (URL analysée : 'http://www.my-eldorado.net/yop/yop/yop.h
tm') :

HTTP/1.1 302 Found
Date: Sat, 23 Oct 2004 21:31:17 GMT
Server: Apache/1.3.31 (Unix) mod_gzip/1.3.19.1a PH
P/4.3.9 mod_ssl/2.8.19 OpenSSL/0.9.6m
Location: -http://www.my-eldorado.net/
Connection: close
Content-Type: text/html; charset=iso-8859-1

pas de 404 ! ;)


GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Sam Oct 23, 2004 22:47

re/index.php
Warning: Cannot modify header information - headers already sent by (output started at /home/public/web/sites/my-eldorado/test1/pseudo_urlw.php:54) in /home/public/web/sites/my-eldorado/test1/pseudo_urlw.php on line 55

pas de 404 non plus ;)

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Sam Oct 23, 2004 22:52

GAMING ZONE a écrit:ok tu as bien a 200, cependant,
Voici le contenu de l'entête HTTP renvoyé par votre serveur (URL analysée : 'http://www.my-eldorado.net/yop/yop/yop.h
tm') :

HTTP/1.1 302 Found
Date: Sat, 23 Oct 2004 21:31:17 GMT
Server: Apache/1.3.31 (Unix) mod_gzip/1.3.19.1a PH
P/4.3.9 mod_ssl/2.8.19 OpenSSL/0.9.6m
Location: -http://www.my-eldorado.net/
Connection: close
Content-Type: text/html; charset=iso-8859-1

pas de 404 ! ;)


Heu j'voudrais bien savoir avec quoi tu analyse les entetes parce que moi je ne recoit jamais de 302


GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Sam Oct 23, 2004 23:04

l'outil de WRI , outils exterieur a ton site ;)
Je suppose que tu regarde les logs de ton serveur :)
http://www.webrankinfo.com/outils/header.php

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Sam Oct 23, 2004 23:58

HTTP/1.1 200 OK
Date: Sat, 23 Oct 2004 22:44:59 GMT
Server: Apache/1.3.31 (Unix) mod_gzip/1.3.19.1a PH
P/4.3.9 mod_ssl/2.8.19 OpenSSL/0.9.6m
X-Powered-By: PHP/4.3.9
Connection: close
Content-Type: text/html

J'viens d'essayer et j'ai ça... Bonsoir.
PS : A mon avis tu n'a pas tout compris


GAMING ZONE
WRInaute passionné
WRInaute passionné
 
Messages: 533
Inscription: Ven Aoû 13, 2004 20:06

Message le Dim Oct 24, 2004 1:02

Je m'inquiete pas car je ne suis pas le seul, je crois que l'on se comprend pas :p
je suis tu as une 200, mais ton exemple ne precise pas l'url :( , c'est dommage !
Ensuite, je suis d'accord que tu as une 200, lorsque tu trouve un fichier correspondant ( m'enfin bon j'ai essayer une autre url .../test1/fr/yop.ph , et il m'as mis aussi une 200 .. mais en ajoutant un p ( pour faire yop.php) alors la ton script debloque mais fait une 200 aussi ! ... )
Ce que je dis , c'est le code 404 fait une 302 point barre ... regarde mon exemple avec l'url -http://www.my-eldorado.net/yop/yop/yop.htm tu verra une 302 (lexemple plus haut ) ...

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Dim Oct 24, 2004 10:26

suis tu as une 200, mais ton exemple ne precise pas l'url , c'est dommage !


Si, 7 posts plus haut

Ensuite, je suis d'accord que tu as une 200, lorsque tu trouve un fichier correspondant ( m'enfin bon j'ai essayer une autre url .../test1/fr/yop.ph , et il m'as mis aussi une 200 .. mais en ajoutant un p ( pour faire yop.php) alors la ton script debloque mais fait une 200 aussi ! ... )


Je suis d'accord c juste le script qui aurait besoin d'etre mis a jour (J'ai pas dis non plus qu'il etait parfait)

Ce que je dis , c'est le code 404 fait une 302 point barre ... regarde mon exemple avec l'url -http://www.my-eldorado.net/yop/yop/yop.htm tu verra une 302 (lexemple plus haut ) ...


Ca me parait un peu logique quand on c'est que la réériture ne ce fait que dans le repertoire test1 et que c le htaccess principal de mon site qui provoque cette redirection (Donc rien à voir avec notre histoire)

milkiway
WRInaute accro
WRInaute accro
 
Messages: 2216
Inscription: Mar Fév 03, 2004 3:00

Message le Dim Oct 24, 2004 12:02

Heu au delà des disputes, ça marche sans pénalisation ou pas ?

Grantome
WRInaute accro
WRInaute accro
 
Messages: 2899
Inscription: Ven Jan 16, 2004 19:47

Message le Dim Oct 24, 2004 12:17

Héhé..... Rien compris....

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

Message le Dim Oct 24, 2004 12:29

milkiway a écrit:Heu au delà des disputes, ça marche sans pénalisation ou pas ?


C'est a dire ?

[Contribution] - Développer un module de réécriture avec PHP

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Browser Sync



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités