Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour
Je dois migrer un site de quelques centaines de pages vers Dotclear. Le site était géré par un autre CMS jusqu'à aujourd'hui.
À la fin de la migration, je voudrais pouvoir rediriger les anciennes adresses vers les nouvelles. Malheureusement, je ne peux utiliser de règle de réécriture dans un .htaccess, en effet il n'y a pas de correspondance entre les anciennes URLs et les futures. Me reste la solution de faire un RedirectPermanent pour chaque page, mais ça ne me semble pas idéal côté performances.
Je préfèrerais surcharger, d'une façon ou d'une autre, la page 404.html de Dotclear, y compris en créant un plugin qui me permettrait d'utiliser un tableau de correspondance entre anciennes et nouvelles URLs.
À moins que le plugin Alias ne permette justement de faire cela ?
Merci d'avance pour toute suggestion :)
Hors ligne
Le plugin Alias semble faire une partie du travail, mais il ne fait pas de redirection, il enregistre juste l'URL qui du coup est valide, mais je souhaiterais qu'elle soit remplacée par la destination de l'alias
Je cherche donc à introduire une redirection dans le fichier _public.php du plugin :
if (!defined('DC_RC_PATH')) { return; }
$core->url->register('alias','','^(.*)$',array('urlAlias','alias'));
class urlAlias extends dcUrlHandlers
{
public static function alias($args)
{
$o = new dcAliases($GLOBALS['core']);
$aliases = $o->getAliases();
foreach ($aliases as $v)
{
if (@preg_match('#^/.*/$#',$v['alias_url']) && @preg_match($v['alias_url'],$args)) {
self::callAliasHandler(preg_replace($v['alias_url'],$v['alias_destination'],$args));
return;
} elseif ($v['alias_url'] == $args) {
self::callAliasHandler($v['alias_destination']);
return;
}
}
self::callAliasHandler($args);
}
public static function callAliasHandler($part)
{
global $core;
$core->url->unregister('alias');
$core->url->getArgs($part,$type,$args);
global $core;
if (!$type) {
$core->url->callDefaultHandler($args);
} else {
$core->url->callHandler($type,$args);
}
}
}
J'ai tenté d'ajouter
http::head(301,'Moved Permanently');
http::redirect($v['alias_destination']);
dans le dernier else mais sans succès pour l'instant :(
Quelqu'un comprenant les URLHandlers pourrait-il m'aiguiller ?
Hors ligne
Voici ce qui semble bien fonctionner dans le fichier _public.php du plugin :
public static function callAliasHandler($part)
{
global $core;
$core->url->unregister('alias');
$core->url->getArgs($part,$type,$args);
global $core;
if (!$type) {
$core->url->callDefaultHandler($args);
} else {
http::head(301,'Moved Permanently');
http::redirect($part);
}
}
Si les tests le confirment, il n'y aura plus qu'à en faire un plugin un peu plus propre ;) Des volontaires ?
Hors ligne
Les tests confirment \o/
Si quelqu'un veut se frotter à en faire quelque chose de plus générique...
Hors ligne
Vous n'êtes pas identifié(e).