Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2015-01-28 11:51:54

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Migration vers Dotclear et redirections

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

#2 2015-01-28 16:13:31

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Migration vers Dotclear et redirections

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

#3 2015-01-28 19:46:35

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Migration vers Dotclear et redirections

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

#4 2015-02-23 11:43:45

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Migration vers Dotclear et redirections

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).

Pied de page des forums

Sites map