[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
[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 passionné

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
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 passionné

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
excuse j'ai edité le message precedent ... relis !
-

GAMING ZONE - WRInaute passionné

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
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 passionné

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
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
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é

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
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
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 passionné

- Messages: 533
- Inscription: Ven Aoû 13, 2004 20:06
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 ) ...
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 :
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Développer un outil avec la Google API
- Séminaire de formation au référencement à Marseille
- Référencement à Marseille : stage de formation Ranking Metrics
- URL canonique : plugins pour Wordpress, Drupal, Joomla et Magento
- Cours de référencement Google par les spécialistes de Ranking Metrics
- Se former au référencement : séminaire Ranking Metrics à Lyon les 17-18 Juin
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- Formation référencement de blogs, netlinking, sites dynamiques - à Toulouse
- Google cherche à se développer au Japon
- Prob avec module php
- Metamoteur en PHP, module pour Xoops
- Ma contribution...
- Ajout d'une fonction url clicable dans un module php
- Votre contribution à HostIP
- 2000 ème post! J'espère avoir apporté une bonne contribution
- Module et réferencement
- recherche module blog
- adsense dans module blog
- module Headlines Joomla
- Module joomla slideshow
- module WebTv sous Joomla
- module CV sous xoops
- CMS module anti Aspi
- module de recherche google (New Beta)
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


le forum