Jump to content

Pages introuvables....introuvables avec PS1.5.1


Recommended Posts

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

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

  • 1 month later...
  • 3 weeks later...
  • 2 weeks later...

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

  • 2 weeks later...

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

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

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

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.

post-409858-0-87230300-1363519575_thumb.jpg

Link to comment
Share on other sites

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

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

  • 2 weeks later...

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... :D

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 months later...
  • 2 weeks later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...