diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 0bec2213739da6cdda271adcadc21e7ee524ad4d..96d12e2c4a3c98b5cc349d5843b7eabc33876555 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -922,19 +922,26 @@ function generer_form_public($script, $corps, $atts='') {
 // http://doc.spip.org/@generer_url_action
 function generer_url_action($script, $args="", $no_entities=false ,$rel = false) {
 
+	// si script=redirect, on veut basculer vers le public !
+	if ($script=='redirect') {
+	  return  generer_url_public('',
+				  "action=$script" .($args ? "&$args" : ''),
+				  $no_entities,$rel);
+	}
+	// sinon, on reste ou on est
 	$url = './';
 	$url = parametre_url($url,'action',$script);
 	if ($args) $url .= quote_amp('&'.$args);
 	if ($redirect = parametre_url($url,'redirect')){
+		// si jamais l'url d'action contient un redirect=ecrire/...
+		// supprimer ce ecrire/ si on y est deja puisqu'on ne le quitte pas
 		if (test_espace_prive() 
 		  AND substr($redirect,0,strlen(_DIR_RESTREINT_ABS))==_DIR_RESTREINT_ABS)
 			$redirect = './'.substr($redirect,strlen(_DIR_RESTREINT_ABS));
 			$url = parametre_url($url,'redirect',$redirect);
 	}
+
 	if ($no_entities) $url = str_replace('&','&',$url);
-	/*return  generer_url_public('',
-				  "action=$script" .($args ? "&$args" : ''),
-				  $no_entities,$rel);*/
 	return $url;
 }