Bonjour à tous,
je suis un ch'ti nouveau de Webmaster hub... grace à ce post et à Google qui l'a trouvé !
C'est donc du script "Modèle de page avec Apache et PHP" dont il s'agit.
J'ai reussi à le faire fonctionner pour des pages htm, rien à redire, ca fonctionne pas trop mal ! Faut dire que ce systeme est assés génial.
Voilà ma question.
Je ne sais pas si julien à reussi à afficher sa page 404.php pour le fichier toto.php, mais un autre probleme subsiste pour moi.
Si par exemple un internaute entre un url faucé en .htm, je me retrouve avec un message d'erreur comme celui-ci
Warning: main(/home/xxx/public_html//innexistant.htm): failed to open stream: No such file or directory in /home/xxx/public_html/include/prefetch.php on line 32 Warning: main(/home/xxx/public_html//innexistant.htm): failed to open stream: No such file or directory in /home/xxx/public_html/include/prefetch.php on line 32 Fatal error: main(): Failed opening required '/home/xxx/public_html//innexistant.htm' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/xxx/public_html/include/prefetch.php on line 32
J'ai évidement essayé la directive ErrorDocument dans mon .htaccess, mais rien à faire pour avoir la page 404.htm. Comme le disait Julien, l'Handler réagit avant cette directive. J'ai bien pensé mettre une fonction de vérification d'existance de fichier, mais vu mon niveau en php, je ne vois pas où et comme réaliser celà.
Mon fichier prefetch.php est :
<?php function prefetchURL() { # parse l'url résultante $url = parse_url($_SERVER['QUERY_STRING']); $document = $url['path']; # Nettoyage du tableau $_GET et $_REQUEST $to_clean = array_keys($_GET); unset($_GET[$to_clean[0]]); unset($_REQUEST[$to_clean[0]]); # On repeuple le tableau $_GET et $_REQUEST if (!empty($url['query'])) { parse_str($url['query'],$query); foreach ($query as $k => $v) { $_GET[$k] = $v; if (!isset($_REQUEST[$k])) { $_REQUEST[$k] = $v; } } } return $_SERVER['DOCUMENT_ROOT'].'/'.$document; } ob_start(); require prefetchURL(); $file = ob_get_contents(); ob_end_clean(); if (preg_match('|<title>(.*?)</title>.*<body>(.*?)'. '</body>|ms',$file,$matches)) { $titre_page = $matches[1]; $contenu_page = $matches[2]; require dirname(__FILE__).'/model.php'; } exit; ?>
Et mon .htaccess :
AddHandler prefetch .htm Action prefetch /include/prefetch.php? ErrorDocument 404 /404.htm
Ma seconde question, je souhaiterai mettre l'ensemble des fichiers .htm dans un autre répertoire, mais ca ne fonctionne pas. Sur le site neokraft au sujet de ce code, kffir disait, je cite : < ./. il y a aussi le méthode des "alias" a insérer dans le fichier httpd.conf.> Le problème pour moi, c'est que je ne pense pas que mon hébergeur me donne acces à ce fichier, d'ailleur, je ne sais pas ou je pourrais le trouver. Y aurrait il donc une autre solution ?
Voilà !
En tout un grand merci à Dan pour ce board !
Cordialement.