diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 313791fcca5895c782e424f51c284d7a371a945a..aa590524a127d947a0c7350c758c2778d7610d6a 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -1137,14 +1137,10 @@ function voir_en_ligne ($type, $id, $statut=false, $image='racine-24.gif', $af =
 	else
 		return '';
 
-	$h = generer_url_entite($id, $type, "var_mode=$en_ligne", '', true);
+	$h = generer_url_entite_absolue($id, $type, "var_mode=$en_ligne", '', true);
 
 	$h = str_replace('&', '&', $h);
 
-	// Forcer l'URL absolue si ce n'est fait.
-	if (!preg_match(',^\w+:,', $h))
-		$h = url_absolue(_DIR_RACINE . $h);
-
 	return $inline  
 	  ? icone_inline($message, $h, $image, "rien.gif", $GLOBALS['spip_lang_left'])
 	: icone_horizontale($message, $h, $image, "rien.gif",$af);
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index e25405cc29c98f5e8e2c39a5c067f58cd9af6053..f3bacecb1d17db73ab8d6d68cd73a0f22d13dd71 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -16,82 +16,89 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // des items des tables SQL principales, selon le statut de publication
 
 // http://doc.spip.org/@generer_url_ecrire_article
-function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_article($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_article=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_articles', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'article', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('articles', $a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	? generer_url_entite_absolue($id, 'article', $args, $ancre, $connect)
+	: (generer_url_ecrire('articles', $a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_rubrique
-function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_rubrique($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_rubrique=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_rubriques', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'rubrique', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('naviguer',$a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	? generer_url_entite_absolue($id, 'rubrique', $args, $ancre, $connect)
+	: (generer_url_ecrire('naviguer',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_breve
-function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_breve($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_breve=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_breves', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'breve', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('breves_voir',$a) . ($ancre ? "#$ancre" : '');
+	$h = ($statut == 'publie' OR $connect)
+	?  generer_url_entite_absolue($id, 'breve', $args, $ancre, $connect)
+	: (generer_url_ecrire('breves_voir',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_mot
-function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_mot($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_mot=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'mot', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('mots_edit',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'mot', $args, $ancre, $connect)
+	: (generer_url_ecrire('mots_edit',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_site
-function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_site($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_syndic=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'site', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('sites',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'site', $args, $ancre, $connect)
+	: (generer_url_ecrire('sites',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_auteur
-function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_auteur($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_auteur=" . intval($id);
-	if ($suite) $a .= "&$suite";
-	if (!$statut) {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'auteur', $suite, $ancre, true)));
-	} else	return generer_url_ecrire('auteur_infos',$a) . ($ancre ? "#$ancre" : '');
+	$h = (!$statut OR $connect)
+	?  generer_url_entite_absolue($id, 'auteur', $args, $ancre, $connect)
+	: (generer_url_ecrire('auteur_infos',$a . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_forum
-function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_forum($id, $args='', $ancre='', $statut='', $connect='') {
 	$a = "id_forum=" . intval($id);
 	if (!$statut) {
 		$statut = sql_getfetsel('statut', 'spip_forum', $a,'','','','',$connect);
 	}
-	if ($suite) $a .= "&$suite";
-	if ($statut == 'publie') {
-		return url_absolue(suivre_lien(_DIR_RACINE, generer_url_entite($id, 'forum', $suite, $ancre, true)));
-	}  else return generer_url_ecrire('controle_forum', "debut_id_forum=$id");
+	$h = ($statut == 'publie' OR $connect)
+	?  generer_url_entite_absolue($id, 'forum', $args, $ancre, $connect)
+	: (generer_url_ecrire('controle_forum', "debut_id_forum=$id" . ($args ? "&$args" : ''))
+		. ($ancre ? "#$ancre" : ''));
+	return $h;
 }
 
 // http://doc.spip.org/@generer_url_ecrire_document
-function generer_url_ecrire_document($id, $suite='', $ancre='', $statut='', $connect='') {
+function generer_url_ecrire_document($id, $args='', $ancre='', $statut='', $connect='') {
 	include_spip('inc/documents');
 	return generer_url_document_dist($id);
 }
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 0a254f5770316384e2b7edce37a93ebaaa9747f1..30df63fe933728ccd7094c9f3feacb4cd01eadb0 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -768,6 +768,14 @@ function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NUL
 	return '';
 }
 
+function generer_url_entite_absolue($id='', $entite='', $args='', $ancre='', $connect=NULL)
+{
+	if (!$connect) $connect = true;
+	$h = generer_url_entite($id, $entite, $args, $ancre, $connect);
+	if (!preg_match(',^\w+:,', $h)) $h = url_absolue(_DIR_RACINE . $h);
+	return  $h;
+}
+
 // Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines
 // variables d'environnement comme $_SERVER[HTTPS] ou ini_get(register_globals)
 // http://doc.spip.org/@test_valeur_serveur