Un saluto a tutti.
Se non sbaglio, dalla versione 1.6 joomla è stato inserito questo nuovo componente e il suo relativo plugin.
Dopo un pò di verifiche che ho eseguito su tale componente, sarei arrivato alla conclusione che non serve quasi a niente.
L' utilità vera di tale componente è che intercetta e memorizza gli errori 404 (url inesistente) presenti nel nostro sito e, in alcuni casi, memorizza la pagina di riferimento da dove è pervenuto il link con errore 404.
E questa è , come dicevo, l' effettiva utilità del componente.
A questo punto, occorrerà intervenire sul link 404 per fare in modo che non generi più l' errore (reindirizzandolo, per esempio con un redirect 301, da htaccess).
Se infatti viene utilizzato il componente stesso per il reindirizzamento, l' url con errore 404 in effetti viene correttamente reindirizzato all' url stabilito da noi nel componente, e quindi non comparirà più la pagina d'errore 404 impostata per il nostro sito.
Questo farebbe pensare che sia tutto a posto ma in realtà, tutti i link reindirizzati dal componente, nonostante portino a pagine esistenti, continuano a generare errore 404.
Pertanto, i motori di ricerca, per esempio google , continueranno a ricevere errori 404 dai link reindirizzati. Ciò viene confermato anche dagli strumenti per webmaster di google->Salute->errori di scansione.
Di seguito, riporto il codice del plugin redirect nativo di joomla che in effetti confermerebbe questa situazione:
<?php
/**
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('JPATH_BASE') or die;
/**
* Plugin class for redirect handling.
*
* @package Joomla.Plugin
* @subpackage System.redirect
*/
class plgSystemRedirect extends JPlugin
{
/**
* Object Constructor.
*
* @access public
* @param object The object to observe -- event dispatcher.
* @param object The configuration object for the plugin.
* @return void
* @since 1.0
*/
function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
// Set the error handler for E_ERROR to be the class handleError method.
JError::setErrorHandling(E_ERROR, 'callback', array('plgSystemRedirect', 'handleError'));
}
static function handleError(&$error)
{
// Get the application object.
$app = JFactory::getApplication();
// Make sure the error is a 404 and we are not in the administrator.
if (!$app->isAdmin() and ($error->getCode() == 404))
{
// Get the full current URI.
$uri = JURI::getInstance();
$current = $uri->toString(array('scheme', 'host', 'port', 'path', 'query', 'fragment'));
// Attempt to ignore idiots.
if ((strpos($current, 'mosConfig_') !== false) || (strpos($current, '=http://') !== false)) {
// Render the error page.
JError::customErrorPage($error);
}
// See if the current url exists in the database as a redirect.
$db = JFactory::getDBO();
$db->setQuery(
'SELECT '.$db->quoteName('new_url').', '.$db->quoteName('published').
' FROM '.$db->quoteName('#__redirect_links') .
' WHERE '.$db->quoteName('old_url').' = '.$db->quote($current),
0, 1
);
$link = $db->loadObject();
// If a redirect exists and is published, permanently redirect.
if ($link and ($link->published == 1)) {
$app->redirect($link->new_url, null, null, true, false);
}
else
{
$referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
$db->setQuery('SELECT id FROM ' . $db->quoteName('#__redirect_links') . ' WHERE old_url= ' . $db->quote($current));
$res = $db->loadResult();
if(!$res) {
// If not, add the new url to the database.
$query = $db->getQuery(true);
$query->insert($db->quoteName('#__redirect_links'), false);
$columns = array( $db->quoteName('old_url'),
$db->quoteName('new_url'),
$db->quoteName('referer'),
$db->quoteName('comment'),
$db->quoteName('hits'),
$db->quoteName('published'),
$db->quoteName('created_date')
);
$query->columns($columns);
$query->values($db->Quote($current). ', '. $db->Quote('').
' ,'.$db->Quote($referer).', '.$db->Quote('').',1,0, '.
$db->Quote(JFactory::getDate()->toSql())
);
$db->setQuery($query);
$db->query();
} else {
// Existing error url, increase hit counter
$query = $db->getQuery(true);
$query->update($db->quoteName('#__redirect_links'));
$query->set($db->quoteName('hits').' = '.$db->quoteName('hits').' + 1');
$query->where('id = '.(int)$res);
$db->setQuery((string)$query);
$db->query();
}
// Render the error page.
JError::customErrorPage($error);
}
}
else {
// Render the error page.
JError::customErrorPage($error);
}
}
}