diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index ba69ba1533c36a2659fad794098a3285a900da79..8893aee78dd655d7d8a3e2262649b995cd9e1df0 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -206,7 +206,7 @@ if ($flag_auteur AND $statut_article == 'prepa') {
 		"<B>"._T('texte_proposer_publication')."</B>",
 		aide ("artprop"),
 		"\n<form method='post' action='",
-		generer_action_auteur("instituer", "article-$id_article-prop", generer_url_ecrire('articles', "id_article=$id_article", true)),
+		redirige_action_auteur("instituer", "article-$id_article-prop", 'articles', "id_article=$id_article"),
       "'>",
 		"<input type='submit' class='fondo' value=\"", 
 		_T('bouton_demande_publication'),
@@ -1275,7 +1275,7 @@ function afficher_statut_articles($id_article, $rubrique_article, $statut_articl
   if ($connect_statut == '0minirezo' AND acces_rubrique($rubrique_article)) {
   	
     echo "\n<form method='post' action='",
-      generer_action_auteur("instituer", "article-$id_article", generer_url_ecrire('articles', "id_article=$id_article", true)),
+      redirige_action_auteur("instituer", "article-$id_article",'articles', "id_article=$id_article"),
       "'>",
 	  debut_cadre_relief("", true),
       "\n<center>", "<B>",_T('texte_article_statut'),"</B>",
diff --git a/ecrire/exec/breves_voir.php b/ecrire/exec/breves_voir.php
index 161f4a247c69325833ce7bea262133dae8144249..426953d3d051f774bbf57bafc0b16d0d3835f7b7 100644
--- a/ecrire/exec/breves_voir.php
+++ b/ecrire/exec/breves_voir.php
@@ -193,15 +193,13 @@ if ($connect_statut=="0minirezo" AND acces_rubrique($id_rubrique) AND ($statut==
 	echo "<table>";
 	echo "<td  align='right'>";
 	icone(_T('icone_publier_breve'), 
-	      generer_action_auteur('instituer', "breve-$id_breve-publie",
-				    generer_url_ecrire("breves_voir","id_breve=$id_breve", true)), "breve-24.gif", "racine-24.gif");
+	      redirige_action_auteur('instituer', "breve-$id_breve-publie","breves_voir","id_breve=$id_breve"), "breve-24.gif", "racine-24.gif");
 	echo "</td>";
 	
 	echo "<td>", http_img_pack("rien.gif", ' ', "width='5'") ."</td>\n";
 	echo "<td  align='right'>";
 	icone(_T('icone_refuser_breve'), 
-	      generer_action_auteur('instituer', "breve-$id_breve-refuse",
-				    generer_url_ecrire("breves_voir","id_breve=$id_breve", true)), "breve-24.gif", "supprimer.gif");
+	      redirige_action_auteur('instituer', "breve-$id_breve-refuse", "breves_voir","id_breve=$id_breve"), "breve-24.gif", "supprimer.gif");
 	echo "</td>";
 	echo "</table>";	
 
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index beefb8b8083e9021da500fd921ea1816aaa8fe76..98a77b66e4833d895461c1e63b749dd5b8a73c8e 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -255,7 +255,7 @@ if ($id_rubrique>0 AND $GLOBALS['meta']['multi_rubriques'] == 'oui' AND ($GLOBAL
 
 	echo debut_block_invisible('languesrubrique');
 	echo "<div class='verdana2' align='center'>";
-	echo menu_langues('changer_lang', $langue_rubrique, '', $langue_parent, generer_action_auteur('instituer', "langue-$id_rubrique-$id_parent", generer_url_ecrire("naviguer","id_rubrique=$id_rubrique", true)), $ze_logo, "supprimer.gif");
+	echo menu_langues('changer_lang', $langue_rubrique, '', $langue_parent, redirige_action_auteur('instituer', "langue-$id_rubrique-$id_parent","naviguer","id_rubrique=$id_rubrique"), $ze_logo, "supprimer.gif");
 	echo "</div>\n";
 	echo fin_block();
 
@@ -463,7 +463,7 @@ function bouton_supprimer_naviguer($id_rubrique, $id_parent, $ze_logo, $flag_edi
 	if (($id_rubrique>0) AND tester_rubrique_vide($id_rubrique) AND $flag_editable) {
 
 		echo "<p><div align='center'>";
-		icone(_T('icone_supprimer_rubrique'), generer_action_auteur('supprimer', "rubrique-$id_rubrique", generer_url_ecrire("naviguer","id_rubrique=$id_parent", true)), $ze_logo, "supprimer.gif");
+		icone(_T('icone_supprimer_rubrique'), redirige_action_auteur('supprimer', "rubrique-$id_rubrique", "naviguer","id_rubrique=$id_parent"), $ze_logo, "supprimer.gif");
 		echo "</div><p>";
 	}
 }
diff --git a/ecrire/inc/auteur_voir.php b/ecrire/inc/auteur_voir.php
index 61f6a572543969d8ad0659916005babebc3bae03..1b45371c7e9971e4eadf03c1d0c4f91ccc16bc04 100644
--- a/ecrire/inc/auteur_voir.php
+++ b/ecrire/inc/auteur_voir.php
@@ -111,10 +111,13 @@ function auteur_voir_rubriques($id_auteur, $url_self)
 	if (!$restreint) {
 		echo _T('info_admin_gere_toutes_rubriques');
 	} else {
-		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur);
-		$redirect = generer_url_ecrire($url_self, "id_auteur=$id_auteur", true); 
-		echo _T('info_admin_gere_rubriques');
-		echo "\n<ul style='list-style-image: url(" . _DIR_IMG_PACK . "rubrique-12.gif)'>";
+		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) ? "id_auteur=$id_auteur" : '';
+
+		echo _T('info_admin_gere_rubriques'),
+			"\n<ul style='list-style-image: url(",
+			_DIR_IMG_PACK,
+			"rubrique-12.gif)'>";
+
 		while ($row_admin = spip_fetch_array($result_admin)) {
 			$id_rubrique = $row_admin["id_rubrique"];
 			
@@ -123,7 +126,7 @@ function auteur_voir_rubriques($id_auteur, $url_self)
 			  "</a>";
 			
 			if ($modif) {
-			  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", generer_action_auteur('supprimer', "auteur_rubrique-$id_auteur-$id_rubrique", $redirect), "'>",
+			  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", redirige_action_auteur('supprimer', "auteur_rubrique-$id_auteur-$id_rubrique", $url_self, $modif), "'>",
 					    _T('lien_supprimer_rubrique'),
 					    "</a>]</font>";
 			}
diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php
index 24dc7350f434ed49b8b86198cd9c38c68511a96c..cf851d1c9af4fad9d8b1aad2646cda6675ad8463 100644
--- a/ecrire/inc/config.php
+++ b/ecrire/inc/config.php
@@ -300,8 +300,7 @@ function appliquer_modifs_config() {
 	}
 
 	if ($purger_skel)
-		redirige_par_entete(generer_action_auteur('purger', 'squelettes',
-			_DIR_RESTREINT_ABS . self(), true));
+		redirige_par_entete(generer_action_auteur('purger', 'squelettes', _DIR_RESTREINT_ABS . self(), true));
 
 }
 
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 1b657ff85691541855d07e744b3f28efa09e9942..e573874291f69b5cf21fc120c8d814c1684b55d0 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -904,14 +904,13 @@ function  afficher_rotateurs($album, $document, $type, $id_article, $id_document
 
 function bouton_tourner_document($id_article, $id, $album, $rot, $type)
 {
-	return generer_action_auteur('tourner', $id, generer_url_ecrire($GLOBALS['exec'], ("id_$type=$id_article&show_docs=$id"), true) . "#$album") .
+	return redirige_action_auteur('tourner', $id, $GLOBALS['exec'], "id_$type=$id_article&show_docs=$id#$album") .
 		"&amp;var_rot=$rot";
 }
 
 function bouton_supprime_document_et_vignette($id_article, $type, $id_v, $album, $id_document=0)
 {
-
-	return generer_action_auteur('supprimer', "document-$id_v", generer_url_ecrire($GLOBALS['exec'], ("id_$type=$id_article"), true) . "#$album");
+	return redirige_action_auteur('supprimer', "document-$id_v", $GLOBALS['exec'], "id_$type=$id_article#$album");
 
 
 }
diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php
index 4451a782902c33264d4bd19e52e59df70caa0c0f..80eff672564b9cf181dd5a52019305085029f27f 100644
--- a/ecrire/inc/forum.php
+++ b/ecrire/inc/forum.php
@@ -84,19 +84,20 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref
 			return;
 	}
 
-	$lien = _DIR_RESTREINT_ABS . str_replace('&amp;', '&', self()) . "#id$id_forum";
+	$lien = str_replace('&amp;', '&', self()) . "#id$id_forum";
 	if ($supprimer)
-	  $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer', "forum-$id_forum $supprimer", $lien),
+	  $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer', "forum-$id_forum-$supprimer", _DIR_RESTREINT_ABS . $lien),
 			$logo,
 			"supprimer.gif", 'right', 'non');
 
 	if ($valider)
-		$controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", $lien),
+		$controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", _DIR_RESTREINT_ABS . $lien),
 			$logo,
 			"creer.gif", 'right', 'non');
 
 	if ($valider_repondre) {
-	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=" . rawurlencode($lien), true)),
+	  $dblret =  rawurlencode(_DIR_RESTREINT_ABS . $lien);
+	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=$dblret", true)),
 			     $logo,
 			     "creer.gif", 'right', 'non');
 	}
diff --git a/ecrire/inc/logos.php b/ecrire/inc/logos.php
index 24e9ed016d29dda98ef2950f56079a195f1d1578..8d01ae0df781847cb0da4798adacbbf4fd5b02c0 100644
--- a/ecrire/inc/logos.php
+++ b/ecrire/inc/logos.php
@@ -68,7 +68,7 @@ function decrire_logo($id_objet, $mode, $id, $width, $height, $titre="", $script
 		"<font size='1'>" .
 		$xy .
 		"\n<br />[<a href='" .
-		generer_action_auteur("iconifier", "unlink $nom.$format", generer_url_ecrire($script, "$id_objet=$id", true)) .
+		redirige_action_auteur("iconifier", "unlink $nom.$format", $script, "$id_objet=$id") .
 		"'>".
 		_T('lien_supprimer') .
 		"</a>]</font>" .
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index f79c22b46fbb1fb229305cd3332dbeb07e996915..9ba3d74bdda9dd639de0af2095cde3abdff2a54c 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -2851,8 +2851,9 @@ function fin_page($credits='') {
 }
 
 function debloquer_article($arg, $texte) {
-	$lien = _DIR_RESTREINT_ABS . parametre_url(self(), 'debloquer_article', $arg, '&');
-	return "<a href='" . generer_action_auteur('instituer', "collaboration-$arg", $lien) .
+	$lien = parametre_url(self(), 'debloquer_article', $arg, '&');
+	return "<a href='" .
+	  generer_action_auteur('instituer', "collaboration-$arg", _DIR_RESTREINT_ABS . $lien) .
 	  "' title=\"" .
 	  entites_html($texte) .
 	  "\">$texte&nbsp;" .
diff --git a/ecrire/inc/session.php b/ecrire/inc/session.php
index 61b601486abecc3ba6d1f8c3e1134a0caf584787..98e2e81b50431faa80d936ae0881e8d14d803be0 100644
--- a/ecrire/inc/session.php
+++ b/ecrire/inc/session.php
@@ -293,6 +293,11 @@ function generer_action_auteur($action, $arg, $redirect="", $no_entites=false)
 	return generer_url_action($action, "arg=$arg&id_auteur=$connect_id_auteur&hash=$hash$redirect", $no_entites);
 }
 
+function redirige_action_auteur($action, $arg, $ret, $gra)
+{
+	return generer_action_auteur($action, $arg, generer_url_ecrire($ret, $gra, true, _DIR_RESTREINT_ABS));
+}
+
 function determine_upload()
 {
 	global $connect_toutes_rubriques, $connect_login, $connect_statut ;
diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php
index 1eafcf671d3903555f3959492bbfae37f0184d2d..347c292490d1e7518bb660ce8fe884ca28404674 100644
--- a/ecrire/inc/sites_voir.php
+++ b/ecrire/inc/sites_voir.php
@@ -110,7 +110,7 @@ function afficher_syndic_articles($titre_table, $requete, $id = 0) {
 	$col = (($connect_statut == '0minirezo') ? 3 :  2) + ($id==0);
 	$tmp_var = substr(md5(join(' ',$requete)), 0, 4);
 	$deb_aff = intval(_request('t_' .$tmp_var));
-	$redirect = generer_url_ecrire($GLOBALS['exec'], ('t_' .$tmp_var . '=' . $deb_aff) . (!$id ? '' : "&id_syndic=$id"), true);
+	$redirect = ('t_' .$tmp_var . '=' . $deb_aff) . (!$id ? '' : "&id_syndic=$id");
 	if (!$requete['FROM']) $requete['FROM']= 'spip_syndic_articles';
 
 	if (!$id) {
@@ -208,11 +208,11 @@ function afficher_syndic_articles_boucle($row, &$my_sites, $bof, $redirect)
 				
 	if ($connect_statut == '0minirezo'){
 		if ($statut == "publie"){
-		  $s =  "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-refuse", $redirect) . "'><font color='black'>"._T('info_bloquer_lien')."</font></a>]";
+			$s =  "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-refuse", $GLOBALS['exec'], $redirect) . "'><font color='black'>"._T('info_bloquer_lien')."</font></a>]";
 		
 		}
 		else if ($statut == "refuse"){
-			$s =  "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $redirect) . "'>"._T('info_retablir_lien')."</a>]";
+			$s =  "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_retablir_lien')."</a>]";
 		}
 		else if ($statut == "off"
 		AND $my_sites[$id_syndic]['miroir'] == 'oui') {
@@ -220,7 +220,7 @@ function afficher_syndic_articles_boucle($row, &$my_sites, $bof, $redirect)
 		}
 		else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
 		{
-			$s = "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $redirect) . "'>"._T('info_valider_lien')."</a>]";
+			$s = "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_valider_lien')."</a>]";
 		}
 		$vals[] = $s;
 	}
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f4a6ec21c14483973c4f5b02ae9596ebc096c493..af68ca80a9d9fe7d6ecacf70e78a8bc9bf7f5319 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -722,7 +722,7 @@ function url_de_base() {
 function generer_url_ecrire($script, $args="", $no_entities=false, $rel=false) {
 	if (!$rel)
 		$rel = url_de_base() . _DIR_RESTREINT_ABS;
-	else
+	else if (!is_string($rel))
 		$rel = _DIR_RESTREINT ? _DIR_RESTREINT : './';
 
 	if ($script AND $script<>'accueil')