Thierry78125 Posted December 7, 2012 Share Posted December 7, 2012 Bonjour, Je suis sous PS1.5.1 avec le module "Pages introuvables" activé, mon .htaccess contient bien : #If rewrite mod isn't enabled ErrorDocument 404 /index.php?controller=404 J'essaie d'accéder à une page qui n'existe pas, la page 404.php s'affiche, je vois bien dans les stats (visiteurs en ligne) que je suis tombé sur une "pagenotfound". Par contre, les stats ne me remontent aucune page introuvable ?! J'ai regardé dans la base et la table pagenotfound est vide ?! Quelqu'un peut-il m'aider ? Merci Thierry Link to comment Share on other sites More sharing options...
Thierry78125 Posted December 9, 2012 Author Share Posted December 9, 2012 Bonjour, Quelqu'un pour m'aider ? Merci Thierry Link to comment Share on other sites More sharing options...
Thierry78125 Posted December 10, 2012 Author Share Posted December 10, 2012 J'ai un peu avancé mais je suis coincé par manque de connaissance de PHP et PS... Dans le fichier modules/pagesnotfound/pagesnotfound.php, la ligne qui pose problème et qui empêche d'ajouter des éléments dans la table pagesnotfound est la suivante : if (strstr($_SERVER['PHP_SELF'], '404.php') && !strstr($_SERVER['REQUEST_URI'], '404.php')) Quand je supprime ce test, toutes les pages visitées sont ajoutées dans la table pagesnotfound... Donc, je suppose que ça signifie que la fonction hooktop est appelée sans savoir que la demande vient de la page 404.php, puisque le test retourne toujours FALSE, non ? Help me, help me please... Link to comment Share on other sites More sharing options...
Superbegood31 Posted January 22, 2013 Share Posted January 22, 2013 Bonjour, Avez-vous résolu votre problème ? Car je rencontre le m^me problème. Merci de votre retour. Link to comment Share on other sites More sharing options...
Thierry78125 Posted January 22, 2013 Author Share Posted January 22, 2013 Bonjour, Non, problème toujours pas résolu. Link to comment Share on other sites More sharing options...
desfleursetc Posted February 13, 2013 Share Posted February 13, 2013 Bonjour J'ai le même problème : Pages introuvables introuvables ! logique mais bon...! Link to comment Share on other sites More sharing options...
Thierry78125 Posted February 13, 2013 Author Share Posted February 13, 2013 Ah ! ça me rassure, je ne suis donc pas le seul ! Je n'ai toujours pas trouvé de solution.... Link to comment Share on other sites More sharing options...
Superbegood31 Posted February 13, 2013 Share Posted February 13, 2013 Curieux que l'on soit si peu impactés par ce bug... Link to comment Share on other sites More sharing options...
Superbegood31 Posted February 27, 2013 Share Posted February 27, 2013 Bonjour à tous, Pas de news du côté de ce module ? Link to comment Share on other sites More sharing options...
Thierry78125 Posted February 27, 2013 Author Share Posted February 27, 2013 Bonjour, Non, je n'ai toujours pas trouvé de solution Link to comment Share on other sites More sharing options...
Superbegood31 Posted February 27, 2013 Share Posted February 27, 2013 Je suis vraiment étonné que l'on soit si peu nombreux à être impactés par ce problème... Link to comment Share on other sites More sharing options...
Superbegood31 Posted February 27, 2013 Share Posted February 27, 2013 J'ai modifié le fichier pagesnotfound.php et cela semble fonctionner. Remplacer : if (strstr($_SERVER['PHP_SELF'], '404.php') && !strstr($_SERVER['REQUEST_URI'], '404.php')) Par : if (strstr($_SERVER['PHP_SELF'], '404.php') or strstr($_SERVER['REQUEST_URI'], '404.php')) Et juste après public function hookTop($params) Intégrer : function hookFrontCanonicalRedirect($params) { if (!Configuration::get('PS_CANONICAL_REDIRECT')) return; if (strstr($_SERVER['REQUEST_URI'], '404.php') AND isset($_SERVER['REDIRECT_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; if (!Validate::isUrl($request_uri = $_SERVER['REQUEST_URI']) OR strstr($_SERVER['REQUEST_URI'], '-admin404')) return; if (strstr($_SERVER['PHP_SELF'], '404.php') or !strstr($_SERVER['REQUEST_URI'], '404.php')) { $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($http_referer) OR Validate::isAbsoluteUrl($http_referer)) Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'pagenotfound` (`request_uri`,`http_referer`,`date_add`) VALUES (\''.pSQL($request_uri).'\',\''.pSQL($http_referer).'\',NOW())'); } } Et voici les lignes de mon .htaccess A mettre entre <IfModule mod_rewrite.c> et </IfModule> #erreur 404 RewriteCond %{HTTP_HOST} ^www.switchboard.fr$ RewriteRule ^page-non-trouvee$ /index.php?controller=404 [QSA,L] puis #If rewrite mod isn't enabled ErrorDocument 404 /index.php?controller=404 Link to comment Share on other sites More sharing options...
STGD Posted March 11, 2013 Share Posted March 11, 2013 Me voilà aussi avec le même prb que vous deux ;.( Pour superbegood ... j'ai un peu de peine à voir exactement Ou ta modif doit être faite ... La première Remplacer par OK pas de souci. Mais la seconde ... public function hookTop($params) et insérer la suite ... Cela donnerai ceci .. public function hookTop($params) function hookFrontCanonicalRedirect($params) { if (!Configuration::get('PS_CANONICAL_REDIRECT')) return; if (strstr($_SERVER['REQUEST ..... etc Car ta première modification, ce trouve dans la deuxième ? Merci de ton aide Salutations Mauricce Link to comment Share on other sites More sharing options...
utaku Posted March 11, 2013 Share Posted March 11, 2013 Hello, j'ai tester ta modification, mais cela ne fonctionne pas sous une version 1.5.2 de ps ^^' merci d'avance Link to comment Share on other sites More sharing options...
Superbegood31 Posted March 12, 2013 Share Posted March 12, 2013 Bonjour, En postant je m’aperçois que dans les stats page non trouvées, il y a des enregistrements qui n'ont rien à faire là. Mais au moins, je vois quand même les appels aux pages non trouvées. @ STDG : la fonction hookFrontCanonicalRedirect doit être mise en dessous de la fonction hookTop public function hookTop($params) { if (Configuration::get('PS_CANONICAL_REDIRECT')) return; if (strstr($_SERVER['REQUEST_URI'], '404.php') && isset($_SERVER['REDIRECT_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; if (!Validate::isUrl($request_uri = $_SERVER['REQUEST_URI']) || strstr($_SERVER['REQUEST_URI'], '-admin404')) return; if (strstr($_SERVER['PHP_SELF'], '404.php') && !strstr($_SERVER['REQUEST_URI'], '404.php')) { $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($http_referer) || Validate::isAbsoluteUrl($http_referer)) Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'pagenotfound` (`request_uri`, `http_referer`, `date_add`, `id_shop`, `id_shop_group`) VALUES (\''.pSQL($request_uri).'\', \''.pSQL($http_referer).'\', NOW(), '.(int)$this->context->shop->id.', '.(int)$this->context->shop->id_shop_group.') '); } } public function hookFrontCanonicalRedirect($params) { if (!Configuration::get('PS_CANONICAL_REDIRECT')) return; if (strstr($_SERVER['REQUEST_URI'], '404.php') AND isset($_SERVER['REDIRECT_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; if (!Validate::isUrl($request_uri = $_SERVER['REQUEST_URI']) OR strstr($_SERVER['REQUEST_URI'], '-admin404')) return; if (strstr($_SERVER['PHP_SELF'], '404.php') or !strstr($_SERVER['REQUEST_URI'], '404.php')) { $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($http_referer) OR Validate::isAbsoluteUrl($http_referer)) Db::getInstance()->Execute(' INSERT INTO `'._DB_PREFIX_.'pagenotfound` (`request_uri`, `http_referer`, `date_add`, `id_shop`, `id_shop_group`) VALUES (\''.pSQL($request_uri).'\', \''.pSQL($http_referer).'\', NOW(), '.(int)$this->context->shop->id.', '.(int)$this->context->shop->id_shop_group.') '); } } } function pnfSort($a, $ { if ($a['nb'] == $b['nb']) return 0; return ($a['nb'] > $b['nb']) ? -1 : 1; } Link to comment Share on other sites More sharing options...
STGD Posted March 17, 2013 Share Posted March 17, 2013 Merci pour l'info, je vais essayer. bon dimanche à toi Link to comment Share on other sites More sharing options...
Thierry78125 Posted March 17, 2013 Author Share Posted March 17, 2013 J'ai essayé ça aussi avec mon PS 1.5.1 et ça ne marche toujours pas... Superbegood, pourriez-vous nous montrer votre .htaccess ? Merci Link to comment Share on other sites More sharing options...
Thierry78125 Posted March 17, 2013 Author Share Posted March 17, 2013 Oups, désolé Superbegood, je n'avais pas vu que vous aviez déjà montré votre .htaccess. J'ai avancé et, en partant du .htaccess de Superbegood, j'ai trouvé ce qu'il fallait modifier : { if (strstr($_SERVER['REQUEST_URI'], '404.php') && isset($_SERVER['REDIRECT_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; if (!Validate::isUrl($request_uri = $_SERVER['REQUEST_URI']) || strstr($_SERVER['REQUEST_URI'], '-admin404')) return; if (strstr($_SERVER['PHP_SELF'], '404.php') or strstr($_SERVER['REQUEST_URI'], 'page-not-found')) { $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($http_referer) || Validate::isAbsoluteUrl($http_referer)) Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'pagenotfound` (`request_uri`, `http_referer`, `date_add`, `id_shop`, `id_shop_group`) VALUES (\''.pSQL($request_uri).'\', \''.pSQL($http_referer).'\', NOW(), '.(int)$this->context->shop->id.', '.(int)$this->context->shop->id_shop_group.') '); } } Du coup, la table pagenotfound se remplit enfin ! Link to comment Share on other sites More sharing options...
Thierry78125 Posted March 17, 2013 Author Share Posted March 17, 2013 Par contre, je ne vois pas le lien qui pose problème. Voir dans la capture jointe des stats du BO : La 1ère ligne correspond à 3 essais de connexion externe avec une URL inexistante. Ex : http://www.poolmate.fr/toto.php La 2ème ligne, un faux lien insérer dans ma page de partenaire (<a href="http://www.poolmate.fr/logicie">'>http://www.poolmate.fr/logicie">) J'aurais voulu voir dans la colonne "Page" le lien posant problème, à savoir "http://www.poolmate.fr/toto.php" pour la 1ère ligne et "http://www.poolmate.fr/logicie" pour la 2ème ligne. Link to comment Share on other sites More sharing options...
STGD Posted March 17, 2013 Share Posted March 17, 2013 A Thierry et Superbegood ... J'ai essayé, modifié le .htacess et le fichier ... Mais rien de nouveau .. Je suis en 1.5.3.1 ... La fonction 404, fonctionne correctement dans le FO ... Mais le module ne veux rien affiché. Merci quand même a vous 2. Amitié Maurice Link to comment Share on other sites More sharing options...
Thierry78125 Posted March 18, 2013 Author Share Posted March 18, 2013 Si tu veux utiliser mon code, il faut bien s'assurer que dans Préférences, SEO & URLs, Erreur 404, il y ait "page-not-found" dans le champ "URL réécrite". Link to comment Share on other sites More sharing options...
Thierry78125 Posted March 18, 2013 Author Share Posted March 18, 2013 Je m'aperçois que REDIRECT_URL est correct dans le fichier 404.php mais ne l'est plus lorsqu'on est dans pagesnotfound.php... J'essaie de mettre la bonne valeur dans une variable globale dans le code de 404.php pour la récupérer dans pagesnotfound.php mais je ne suis pas un as en PHP. Pour les développeurs, j'essaie d'utiliser $GLOBALS mais ça ne marche pas... Quelqu'un pour m'aider ? Merci Link to comment Share on other sites More sharing options...
Superbegood31 Posted March 28, 2013 Share Posted March 28, 2013 Avec la venue de la version 1.5.4, j'ai regardé de près le module pagenotfound. Et voilà, cela fonctionne comme il faut. Je rappel que je suis sous la 1.5.0.17. Pour que ça fonctionne, chez moi, j'ai modifié certains fichiers dont voici le contenu : 404.php require_once(dirname(__FILE__).'/config/config.inc.php'); Tools::displayFileAsDeprecated(); Controller::getController('PageNotFoundController')->run(); controllers/front/PageNotFoundController.php class PageNotFoundControllerCore extends FrontController { public $php_self = '404'; public $page_name = 'pagenotfound'; /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); if (in_array(Tools::strtolower(substr($_SERVER['REQUEST_URI'], -3)), array('png', 'jpg', 'gif'))) { header('Content-Type: image/gif'); readfile(_PS_IMG_DIR_.'404.gif'); exit; } elseif (in_array(Tools::strtolower(substr($_SERVER['REQUEST_URI'], -3)), array('.js', 'css'))) exit; parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'404.tpl'); } public function canonicalRedirection($canonical_url = '') { // 404 - no need to redirect to the canonical url } } modules/pagesnotfound/pagesnotfound.php if (!defined('_PS_VERSION_')) exit; class Pagesnotfound extends Module { private $_html = ''; public function __construct() { $this->name = 'pagesnotfound'; $this->tab = 'analytics_stats'; $this->version = 1.1; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Pages not found'); $this->description = $this->l('Display the pages requested by your visitors that have not been found.'); } public function install() { if (!parent::install() || !$this->registerHook('top') || !$this->registerHook('AdminStatsModules')) return false; return Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'pagenotfound` ( id_pagenotfound INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, id_shop INTEGER UNSIGNED NOT NULL DEFAULT \'1\', id_shop_group INTEGER UNSIGNED NOT NULL DEFAULT \'1\', request_uri VARCHAR(256) NOT NULL, http_referer VARCHAR(256) NOT NULL, date_add DATETIME NOT NULL, PRIMARY KEY(id_pagenotfound), INDEX (`date_add`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;'); } public function uninstall() { return (parent::uninstall() && Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'pagenotfound`')); } private function getPages() { $sql = 'SELECT http_referer, request_uri, COUNT(*) as nb FROM `'._DB_PREFIX_.'pagenotfound` WHERE date_add BETWEEN '.ModuleGraph::getDateBetween() .Shop::addSqlRestriction(). 'GROUP BY http_referer, request_uri'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); $pages = array(); foreach ($result as $row) { $row['http_referer'] = parse_url($row['http_referer'], PHP_URL_HOST).parse_url($row['http_referer'], PHP_URL_PATH); if (!isset($row['http_referer']) || empty($row['http_referer'])) $row['http_referer'] = '--'; if (!isset($pages[$row['request_uri']])) $pages[$row['request_uri']] = array('nb' => 0); $pages[$row['request_uri']][$row['http_referer']] = $row['nb']; $pages[$row['request_uri']]['nb'] += $row['nb']; } uasort($pages, 'pnfSort'); return $pages; } public function hookAdminStatsModules() { if (Tools::isSubmit('submitTruncatePNF')) { Db::getInstance()->execute('TRUNCATE `'._DB_PREFIX_.'pagenotfound`'); $this->_html .= '<div class="conf confirm"> '.$this->l('The pages not found cache has been emptied.').'</div>'; } else if (Tools::isSubmit('submitDeletePNF')) { Db::getInstance()->execute(' DELETE FROM `'._DB_PREFIX_.'pagenotfound` WHERE date_add BETWEEN '.ModuleGraph::getDateBetween()); $this->_html .= '<div class="conf confirm"> '.$this->l('Pages not found have been deleted.').'</div>'; } $this->_html .= '<div class="blocStats"><h2 class="icon-'.$this->name.'"><span></span>'.$this->displayName.'</h2>'; if (!file_exists(dirname(__FILE__).'/../../.htaccess')) $this->_html .= '<br/><div class="warning warn">'.$this->l('You must use a .htaccess file to redirect 404 errors to the page "404.php"').'</div>'; $pages = $this->getPages(); if (count($pages)) { $this->_html .= ' <table class="table" cellpadding="0" cellspacing="0"> <tr> <th width="200">'.$this->l('Page').'</th> <th width="500">'.$this->l('Referrer').'</th> <th>'.$this->l('Counter').'</th> </tr>'; foreach ($pages as $ru => $hrs) foreach ($hrs as $hr => $counter) if ($hr != 'nb') $this->_html .= ' <tr> <td><a href="'.$ru.'-admin404">'.wordwrap($ru, 30, '<br />', true).'</a></td> <td><a href="'.Tools::getProtocol().$hr.'">'.wordwrap($hr, 40, '<br />', true).'</a></td> <td align="right">'.$counter.'</td> </tr>'; $this->_html .= ' </table>'; } else $this->_html .= '<div class="conf confirm"> '.$this->l('No pages registered').'</div>'; $this->_html .= '</div>'; if (count($pages)) $this->_html .= '<div class="clear"> </div> <div class="blocStats"><h2 class="icon-'.$this->name.'">'.$this->l('Empty database').'</h2> <form action="'.Tools::htmlEntitiesUtf8($_SERVER['REQUEST_URI']).'" method="post"> <input type="submit" class="button" name="submitDeletePNF" value="'.$this->l('Empty ALL pages not found for this period').'"> <input type="submit" class="button" name="submitTruncatePNF" value="'.$this->l('Empty ALL pages not found').'"> </form> </div>'; $this->_html .= '<br /> <div class="blocStats"><h2 class="icon-guide"><span></span>'.$this->l('Guide').'</h2> <h2>'.$this->l('404 errors').'</h2> <p>'.$this->l('A 404 error is an HTTP').'</p> <h3>'.$this->l('How to catch these errors?').'</h3> <p>'.$this->l('If your webhost supports .htaccess files, you can create one in the root directory of PrestaShop and insert the following line inside:').' <i>ErrorDocument 404 '.__PS_BASE_URI__.'404.php</i>. '. $this->l('A user requesting a page which doesn\'t exist will be redirected to the following page.').' <i>'.__PS_BASE_URI__.'404.php</i>. '. $this->l('This module logs access to this page.').'</p><br /> </div>'; return $this->_html; } public function hookTop($params) { if (strstr($_SERVER['REQUEST_URI'], '404.php') && isset($_SERVER['REDIRECT_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL']; if (!Validate::isUrl($request_uri = $_SERVER['REQUEST_URI']) || strstr($_SERVER['REQUEST_URI'], '-admin404')) return; if (get_class(Context::getContext()->controller) == 'PageNotFoundController') { $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($http_referer) || Validate::isAbsoluteUrl($http_referer)) { Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'pagenotfound` (`request_uri`, `http_referer`, `date_add`, `id_shop`, `id_shop_group`) VALUES (\''.pSQL($request_uri).'\', \''.pSQL($http_referer).'\', NOW(), '.(int)$this->context->shop->id.', '.(int)$this->context->shop->id_shop_group.') '); } } } } function pnfSort($a, $ { if ($a['nb'] == $b['nb']) return 0; return ($a['nb'] > $b['nb']) ? -1 : 1; } Voilà, j'espère que ça va aider... Link to comment Share on other sites More sharing options...
STGD Posted March 28, 2013 Share Posted March 28, 2013 (edited) @ SWITCHBOARD MERCI .. cela fonctionne sur ma version 1.5.3.1 Si jamais voici les deux fichiers pour les suivants qui les voudrais directement Salutations 404.zip Edited March 28, 2013 by STGD (see edit history) Link to comment Share on other sites More sharing options...
Superbegood31 Posted April 11, 2013 Share Posted April 11, 2013 Bonjour à tous, Je m’aperçois que le module ne prend pas les urls avec les accents...du coup (vu que j'en ai), je me retrouve avec des pages qui n'ont rien à faire ici. Si quelqu'un connaît l'astuce. Merci d'avance Link to comment Share on other sites More sharing options...
Superbegood31 Posted October 14, 2013 Share Posted October 14, 2013 Petit up Merci Link to comment Share on other sites More sharing options...
Superbegood31 Posted October 25, 2013 Share Posted October 25, 2013 J'ai résolu mon problème d'url avec accents. Les url enregistrées en base de données sont en héxa, donc j'ai ajouter la fonction rawurldecode. <td><a href="'.$ru.'-admin404">'.rawurldecode(wordwrap($ru, 150, '<br />', true)).'</a></td> <td><a href="'.Tools::getProtocol().$hr.'">'.rawurldecode(wordwrap($hr, 150, '<br />', true)).'</a></td> Bonne journée Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now