diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php
index 37527f2b78861506d0f219477158c881dcccf7b8..488f01c7131029333aeaba6ea7a8feb9b6f72c59 100644
--- a/ecrire/action/editer_article.php
+++ b/ecrire/action/editer_article.php
@@ -24,7 +24,8 @@ function action_editer_article_dist() {
 	if (!$id_article = intval($arg)) {
 		$id_parent = _request('id_parent');
 		$id_auteur = $GLOBALS['auteur_session']['id_auteur'];
-		if (!($id_parent AND $id_auteur)) redirige_par_entete('./');
+		if (!($id_parent AND $id_auteur))
+			redirige_par_entete(generer_url_ecrire());
 		$id_article = insert_article($id_parent);
 		
 		# cf. GROS HACK ecrire/inc/getdocument
diff --git a/ecrire/action/editer_breve.php b/ecrire/action/editer_breve.php
index 3b112d32468987d609c1ce85b4cfa5b2c585f44f..a49e1e12198360e06e4a8c717d9ba2f355305cf6 100644
--- a/ecrire/action/editer_breve.php
+++ b/ecrire/action/editer_breve.php
@@ -42,7 +42,7 @@ function action_editer_breve_dist() {
 	} 
 	// Erreur
 	else{
-		redirige_par_entete('./');
+		redirige_par_entete(generer_url_ecrire());
 	}
 
 	// Rediriger le navigateur
diff --git a/ecrire/action/editer_rubrique.php b/ecrire/action/editer_rubrique.php
index e8f53604cc526f16e9093830c0fbf747e0375a6d..1ae4554f17cd7868b2db9a1b06fe41ca2c37b7ab 100644
--- a/ecrire/action/editer_rubrique.php
+++ b/ecrire/action/editer_rubrique.php
@@ -21,7 +21,8 @@ function action_editer_rubrique_dist() {
 	$arg = $securiser_action();
 
 	if (!$id_rubrique = intval($arg)) {
-		if ($arg != 'oui') redirige_par_entete('./');
+		if ($arg != 'oui') 
+			redirige_par_entete(generer_url_ecrire());
 		$id_rubrique = insert_rubrique(_request('id_parent'));
 	}
 
diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php
index 5951036acf8d58cdf3437f6b433f9334246a389c..4af38a5b1ba034ba68f381747516f1cbdadee889 100644
--- a/ecrire/action/editer_site.php
+++ b/ecrire/action/editer_site.php
@@ -63,7 +63,7 @@ function action_editer_site_dist() {
 	}
 	// Erreur
 	else {
-		redirige_par_entete('./');
+		redirige_par_entete(generer_url_ecrire());
 	}
 
 	// Re-syndiquer le site
diff --git a/ecrire/action/export_all.php b/ecrire/action/export_all.php
index 9b28a38f9a1e8418b5d21d2f415bfcd06a7c552d..87b5b427ef3408936218a83df74ba16146f07cc9 100644
--- a/ecrire/action/export_all.php
+++ b/ecrire/action/export_all.php
@@ -79,7 +79,7 @@ function action_export_all_dist()
 		
 			echo "<p style='text-align: left'>".
 			  $n,
-			" <a href='" . _DIR_RESTREINT . "'>".
+			  " <a href='" . generer_url_ecrire() . "'>".
 			_T('info_sauvegarde_reussi_03')
 			. "</a> "
 			._T('info_sauvegarde_reussi_04')
diff --git a/ecrire/balise/login_public.php b/ecrire/balise/login_public.php
index eb2f93b54f881173de8c81574e1080533b0d7bfb..a5a69b25123c0df6e2504b15cf5d62d23c60dea5 100644
--- a/ecrire/balise/login_public.php
+++ b/ecrire/balise/login_public.php
@@ -52,8 +52,7 @@ function login_explicite($login, $cible) {
 	} else {
 		if (preg_match(",[?&]url=([^&]*),", $action, $m))
 			$cible = rawurldecode($m[1]);
-		else
-			$cible = _DIR_RESTREINT ;
+		else $cible = generer_url_ecrire();
 	}
 
 	verifier_visiteur();
diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php
index 43b9d1a6613f5dd9d420769b17f29fa8b797714b..fc33dbfda74a7656cde0011591ff2ad78bd510ec 100644
--- a/ecrire/exec/accueil.php
+++ b/ecrire/exec/accueil.php
@@ -193,6 +193,8 @@ function colonne_droite_neq4($id_rubrique, $activer_breves,
 
 	if (!$_COOKIE['spip_admin']) {
 		$cookie = rawurlencode("@$connect_login");
+		$retour = rawurlencode(_DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT);
+		$lien = generer_url_public('spip_cookie', "cookie_admin=$cookie&url=$retour");
 		$gadget .= "<div>&nbsp;</div>".
 			  "<table width='95%'><tr>".
 			  "<td style='width: 100%'>".
@@ -203,7 +205,7 @@ function colonne_droite_neq4($id_rubrique, $activer_breves,
 			  http_img_pack("rien.gif", ' ', "width='10'") .
 			  "</td>".
 			  "<td style='width: 250px'>".
-			  icone_horizontale(_T('icone_activer_cookie'), generer_url_public('spip_cookie', "cookie_admin=$cookie&url=".rawurlencode(_DIR_RESTREINT_ABS)), "cookie-24.gif", "", false).
+			icone_horizontale(_T('icone_activer_cookie'), $lien,"cookie-24.gif", "", false).
 			  "</td></tr></table>";
 	}
 
@@ -249,8 +251,9 @@ function personnel_accueil($coockcookie)
 	//
 	
 	if ($coockcookie) {
+		$lien = generer_url_public("spip_cookie", "cookie_admin=non&url=".rawurlencode(_DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT));
 		$t = _T('icone_supprimer_cookie');
-		$t = icone_horizontale($t, generer_url_public("spip_cookie", "cookie_admin=non&url=".rawurlencode(_DIR_RESTREINT_ABS)), "cookie-24.gif", "", false);
+		$t = icone_horizontale($t, $lien, "cookie-24.gif", "", false);
 		if ($GLOBALS['spip_display'] != 1) 
 			$t = str_replace('</td></tr></table>', 
 					 aide("cookie").'</td></tr></table>',
diff --git a/ecrire/exec/menu_navigation.php b/ecrire/exec/menu_navigation.php
index de8b03fd3793438072a8dec9e51cf176d145444a..129868af0ff7637515db904afa6d947202a4f63e 100644
--- a/ecrire/exec/menu_navigation.php
+++ b/ecrire/exec/menu_navigation.php
@@ -42,7 +42,7 @@ function exec_menu_navigation_dist() {
 	if (spip_num_rows($vos_articles) > 0) {
 			$gadget .= "<div>&nbsp;</div>";
 			$gadget .= "<div class='bandeau_rubriques' style='z-index: 1;'>";
-			$gadget .= bandeau_titre_boite2(afficher_plus('./') . '<b>' . _T('info_articles_proposes') . '</b>', "article-24.gif", $couleur_foncee, 'white', false);
+			$gadget .= bandeau_titre_boite2(afficher_plus(generer_url_ecrire()) . '<b>' . _T('info_articles_proposes') . '</b>', "article-24.gif", $couleur_foncee, 'white', false);
 			$gadget .= "<div class='plan-articles'>";
 			while($row = spip_fetch_array($vos_articles)) {
 				$id_article = $row['id_article'];
diff --git a/ecrire/exec/upgrade.php b/ecrire/exec/upgrade.php
index 9ee787775f59c993f0955d082a11757cdc71a736..6d3a9c4971f8ad33d96be87712e72a05a2ef2337 100644
--- a/ecrire/exec/upgrade.php
+++ b/ecrire/exec/upgrade.php
@@ -62,7 +62,7 @@ function exec_upgrade_dist() {
 
 	// Qu'est-ce que tu fais ici?
 	if ($spip_version == $version_installee)
-		redirige_par_entete('./');
+		redirige_par_entete(generer_url_ecrire());
 
 	// On passe a l'upgrade
 	include_spip('inc/admin');
diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php
index 57260f1e69c6cd0dad4fc0863152e9a3177a0cca..3015ac28fc7e6c32139c3cf86c2fc64fbcd32e98 100644
--- a/ecrire/inc/actions.php
+++ b/ecrire/inc/actions.php
@@ -274,13 +274,14 @@ function verifier_php_auth() {
 function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') {
 	@Header("WWW-Authenticate: Basic realm=\"espace prive\"");
 	@Header("HTTP/1.0 401 Unauthorized");
-	echo "<b>$pb</b><p>$raison</p>[<a href='./'>$retour</a>] ";
+	$ici = generer_url_ecrire();
+	echo "<b>$pb</b><p>$raison</p>[<a href='$ici'>$retour</a>] ";
 	if ($url) {
 		echo "[<a href='", generer_url_public('spip_cookie',"essai_auth_http=oui&$url"), "'>$re</a>]";
 	}
 	
 	if ($lien)
-		echo " [<a href='" . _DIR_RESTREINT_ABS . "'>"._T('login_espace_prive')."</a>]";
+		echo " [<a href='$ici'>"._T('login_espace_prive')."</a>]";
 	exit;
 }
 
diff --git a/ecrire/inc/admin.php b/ecrire/inc/admin.php
index 06346b59af5eea7ff4a656f6c4b8d92ae4accbe0..ef5850fe48cc30598a8208ffadde59c2d189a422 100644
--- a/ecrire/inc/admin.php
+++ b/ecrire/inc/admin.php
@@ -54,37 +54,35 @@ function debut_admin($script, $action, $commentaire='') {
 			return true;
 		}
 		$form = $commentaire
-			. "<form action='./' method='post'>"
-			. copy_request($script)
-			. '<input type="hidden" name="validation_admin" value="'.$signal.'" />'
-			. bouton_suivant(_T('bouton_valider'))
-		. "</form>";
+		  . copy_request($script,
+				 ('<input type="hidden" name="validation_admin" value="'.$signal.'" />'
+				  . bouton_suivant(_T('bouton_valider'))));
+
 		$js = '';
 	}
 
 	else {
 		$form =  $commentaire
-		. "<form action='./' method='post'>"
-		. copy_request($script)
-		. fieldset(_T('info_authentification_ftp').aide("ftp_auth"),
-			array(
-				'fichier' => array(
-					'label' => _T('info_creer_repertoire'),
-					'valeur' => $signal
-					)),
-			('<br />'
-			 . _T('info_creer_repertoire_2', array('repertoire' => joli_repertoire($dir)))
-			 . bouton_suivant(_T('bouton_recharger_page'))))
-		. "</form>";
-		$js = " onload='document.forms[0].fichier.value=\"\";barre_inserer(\"$signal\", document.forms[0].fichier)'";
-	}
+		  . copy_request($script,
+				 (fieldset(_T('info_authentification_ftp').aide("ftp_auth"),
+					   array(
+						 'fichier' => array(
+								    'label' => _T('info_creer_repertoire'),
+								    'valeur' => $signal
+								    )),
+					   ('<br />'
+					    . _T('info_creer_repertoire_2', array('repertoire' => joli_repertoire($dir)))
+					    . bouton_suivant(_T('bouton_recharger_page'))))));
 
 	// code volontairement tordu:
 	// provoquer la copie dans le presse papier du nom du repertoire
 	// en remettant a vide le champ pour que ca marche aussi en cas
 	// de JavaScript inactif.
-	echo minipres(_T('info_action', array('action' => $action)),
-		 $form, $js);
+
+		$js = " onload='document.forms[0].fichier.value=\"\";barre_inserer(\"$signal\", document.forms[0].fichier)'";
+	}
+
+	echo minipres(_T('info_action', array('action' => $action)), $form, $js);
 	exit;
 }
 
@@ -103,7 +101,7 @@ function fin_admin($action) {
 
 
 // http://doc.spip.org/@copy_request
-function copy_request($script)
+function copy_request($script, $suite)
 {
 	$hidden = ""; 
 	$args = $_POST;
@@ -115,6 +113,7 @@ function copy_request($script)
 		  entites_html($c) .
 		  "'  />";
 	}
-	return $hidden;
+	return "<form action='" . generer_url_ecrire() .
+	  "' method='post'><div>$hidden$suite</div></form>";
 }
 ?>
diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php
index 8bb3c82c8477905a427c231801b43617e01fad22..251e58e781ec35ca048da3d05918f20a85d6ba5e 100644
--- a/ecrire/inc/commencer_page.php
+++ b/ecrire/inc/commencer_page.php
@@ -93,7 +93,7 @@ function init_body($rubrique='accueil', $sous_rubrique='accueil', $id_rubrique='
 
 	if ($spip_display == "4") {
 		$res .= "<ul>"
-		. "\n<li><a href='./'>"._T('icone_a_suivre')."</a></li>"
+		. "\n<li><a href='" . generer_url_ecrire() ."'>"._T('icone_a_suivre')."</a></li>"
 		. "\n<li><a href='" . generer_url_ecrire("naviguer") . "'>"._T('icone_edition_site')."</a></li>"
 		. "\n<li><a href='" . generer_url_ecrire("forum"). "'>"._T('titre_forum')."</a></li>"
 		. "\n<li><a href='" . generer_url_ecrire("auteurs") . "'>"._T('icone_auteurs')."</a></li>"
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 70db96f46c78693cd410422e1c1976da0ecae7b2..2cb71400a2386ef9b2efee8189c0ae057f915fe3 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -756,16 +756,12 @@ function url_de_base() {
 // http://httpd.apache.org/docs/2.0/mod/mod_dir.html
 
 // http://doc.spip.org/@generer_url_ecrire
-function generer_url_ecrire($script, $args="", $no_entities=false, $rel=false) {
+function generer_url_ecrire($script='', $args="", $no_entities=false, $rel=false) {
 	if (!$rel)
-		$rel = url_de_base() . _DIR_RESTREINT_ABS;
+		$rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT;
 	else if (!is_string($rel))
-		$rel = _DIR_RESTREINT ? _DIR_RESTREINT : './';
-
-	// Les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
-	// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
-	if (preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']))
-		$rel .= 'index.php';
+		$rel = _DIR_RESTREINT ? _DIR_RESTREINT :
+			('./'  . _SPIP_ECRIRE_SCRIPT);
 
 	if ($script AND $script<>'accueil') 
 		$args = "?exec=$script" . (!$args ? '' : "&$args");
@@ -1002,9 +998,18 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	       "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
 
 	// L'adresse de base du site ; on peut mettre '' si la racine est geree par
-	// le script index.php
+	// le script de l'espace public, alias  index.php
 	define('_SPIP_SCRIPT', 'spip.php');
 
+	// le script de l'espace prive
+	// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
+	// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
+	// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
+
+	define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
+	       preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
+	       'index.php' : '');
+
 	// le nom du repertoire plugins/
 	define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
 
diff --git a/ecrire/install/etape_6.php b/ecrire/install/etape_6.php
index 5bf4b722b1794aedeb1953976ca34b577b5d4c72..fc68a30dd64f444f29d64a5d08d06228c998cd5f 100644
--- a/ecrire/install/etape_6.php
+++ b/ecrire/install/etape_6.php
@@ -103,7 +103,7 @@ function install_etape_6_dist()
 		@unlink(_FILE_CHMOD_INS . _FILE_TMP . '.php');
 	}
 
-	echo "<form action='./' method='post'><div>";
+	echo "<form action='", generer_url_ecrire(), "' method='post'><div>";
 	echo bouton_suivant();
 	echo "</div></form>";
 	echo install_fin_html();