[Contribution] - Développer un module de réécriture avec PHP
18 messages
• Page 1 sur 2 • 1, 2
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
- troops
- WRInaute impliqué

- Messages: 807
- Inscription: 16 Mar 2003
[Contribution] - Développer un module de réécriture avec PHP
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...
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 impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
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 :
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
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.
-

GAMING ZONE - WRInaute impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
excuse j'ai edité le message precedent ... relis !
-

GAMING ZONE - WRInaute impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
ok tu as bien a 200, cependant,
pas de 404 !
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 impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
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 impliqué

- Messages: 807
- Inscription: 16 Mar 2003
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 impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
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
Je suppose que tu regarde les logs de ton serveur
http://www.webrankinfo.com/outils/header.php
- troops
- WRInaute impliqué

- Messages: 807
- Inscription: 16 Mar 2003
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
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 impliqué

- Messages: 548
- Inscription: 13 Aoû 2004
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 ) ...
je suis tu as une 200, mais ton exemple ne precise pas l'url
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 impliqué

- Messages: 807
- Inscription: 16 Mar 2003
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)
18 messages
• Page 1 sur 2 • 1, 2
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 :
- besoin d'aide pour développer un module spécifique
- Développer un moteur de recherche en PHP.
- PHP : module de questions / réponses
- Prob avec module php
- Metamoteur en PHP, module pour Xoops
- Ajout d'une fonction url clicable dans un module php
- Ma contribution...
- Regle de réécriture et PHP
- Votre contribution à HostIP
- petite contribution joomla .htaccess
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


