diff --git a/ecrire/inc_acces.php3 b/ecrire/inc_acces.php3
index a1308006c06b58074c458c4b461b80c3a86d84df..430fdb15327f8f2eb9c04741b391425b9bf62403 100644
--- a/ecrire/inc_acces.php3
+++ b/ecrire/inc_acces.php3
@@ -126,7 +126,7 @@ function ecrire_acces() {
 		ecrire_logins($fichier, $logins);
 		fclose($fichier);
 	} else {
-		redirige_par_entete(generer_url_ecrire("../spip_test_dirs"));
+		redirige_par_entete(generer_url_public("spip_test_dirs"));
 	}
 
 	$query = "SELECT login, htpass FROM spip_auteurs WHERE statut = '0minirezo'";
diff --git a/ecrire/inc_accueil.php b/ecrire/inc_accueil.php
index d9695d0b3510ee80063e1ef4a939cfa3163a580d..749dc54905e5f85342fb251752e5088955ed6da0 100644
--- a/ecrire/inc_accueil.php
+++ b/ecrire/inc_accueil.php
@@ -283,7 +283,7 @@ if ($spip_display != 4) {
 	if ($_COOKIE['spip_admin']) {
 			$texte = _T('icone_supprimer_cookie');
 			if ($spip_display != 1) $texte .= aide("cookie");
-			icone_horizontale( $texte , generer_url_ecrire("../spip_cookie", "cookie_admin=non&url=".rawurlencode(_DIR_RESTREINT_ABS)), "cookie-24.gif", "");
+			icone_horizontale( $texte , generer_url_public("spip_cookie", "cookie_admin=non&url=".rawurlencode(_DIR_RESTREINT_ABS)), "cookie-24.gif", "");
 		}
 	}
 
diff --git a/ecrire/inc_admin_vider.php b/ecrire/inc_admin_vider.php
index 2b32285a74f758101db5c3335992760a94e8ab87..0883b77603094e9da7588d4608845e503b76adb6 100644
--- a/ecrire/inc_admin_vider.php
+++ b/ecrire/inc_admin_vider.php
@@ -100,7 +100,7 @@ if ($quota_cache) {
 	echo _T('taille_cache_infinie');
 }
 echo ' ('._T('cache_modifiable_webmestre').')</p>', 
-  "\n<form action='" . generer_url_ecrire("../spip_cache","") . "' method='post'>", 
+  "\n<form action='" . generer_url_public("spip_cache","") . "' method='post'>", 
   "\n<INPUT TYPE='hidden' NAME='id_auteur' VALUE='$connect_id_auteur' />", 
   "\n<INPUT TYPE='hidden' NAME='hash' VALUE='" . calculer_action_auteur("purger_cache") . "' />", 
   "\n<INPUT TYPE='hidden' NAME='purger_cache' VALUE='oui' />",
@@ -112,10 +112,10 @@ echo ' ('._T('cache_modifiable_webmestre').')</p>',
 
  debut_cadre_relief("image-24.gif", false, "", _T('info_images_auto'));
  echo "<div style='text-align: center;'>",
-   "<iframe width='530px' height='65px' src='", generer_url_ecrire("../spip_cache", "id_auteur=$connect_id_auteur&hash=".calculer_action_auteur("afficher_cache_images")."&afficher_cache_images=oui&lang=$spip_lang"), "'></iframe>",
+   "<iframe width='530px' height='65px' src='", generer_url_public("spip_cache", "id_auteur=$connect_id_auteur&hash=".calculer_action_auteur("afficher_cache_images")."&afficher_cache_images=oui&lang=$spip_lang"), "'></iframe>",
    "</div>";
 
-echo "\n<form action='" . generer_url_ecrire("../spip_cache","") . "' method='post'>", "\n<INPUT TYPE='hidden' NAME='id_auteur' VALUE='$connect_id_auteur'>",
+echo "\n<form action='" . generer_url_public("spip_cache","") . "' method='post'>", "\n<INPUT TYPE='hidden' NAME='id_auteur' VALUE='$connect_id_auteur'>",
    "\n<INPUT TYPE='hidden' NAME='hash' VALUE='" . calculer_action_auteur("purger_cache_images") . "'>",
   "\n<INPUT TYPE='hidden' NAME='purger_cache_images' VALUE='oui'>",
   "\n<INPUT TYPE='hidden' NAME='redirect' VALUE='", generer_url_ecrire(_DIR_RESTREINT_ABS . "admin_vider") . "' />", 
diff --git a/ecrire/inc_config-fonctions.php b/ecrire/inc_config-fonctions.php
index 4ac8ac8c257ac65cd3f34879e1650f8f22c2b53d..e31f6f1f4eafc1a0080b940a4b9872368ed4462a 100644
--- a/ecrire/inc_config-fonctions.php
+++ b/ecrire/inc_config-fonctions.php
@@ -116,7 +116,7 @@ function afficher_choix_vignette($process) {
 
 	echo "<td  width='",($taille_preview+4),"'><div align='center' valign='bottom' width='",($taille_preview+4),"'><a href='" , generer_url_ecrire("config-fonctions","image_process=$process"), 
 	  "'><img src='",
-	  generer_url_ecrire('../spip_image', "action=tester&doc=$process"),
+	  generer_url_public('spip_image', "action=tester&doc=$process"),
 	  "' border='$border' /></a><br />";
 	if ($border) echo "<b>$process</b>";
 	else echo "$process";
diff --git a/ecrire/inc_config.php3 b/ecrire/inc_config.php3
index a43d0acfb9a98e3acee65c0c9e1f0d5f6cba5c45..b8c848e76034d0878bb1ee8dc43dc118ea1ab53a 100644
--- a/ecrire/inc_config.php3
+++ b/ecrire/inc_config.php3
@@ -298,7 +298,7 @@ function appliquer_modifs_config() {
 	}
 
 	if ($purger_skel) {
-	  redirige_par_entete(generer_url_ecrire("../spip_cache"), "?purger_squelettes=oui&id_auteur=$connect_id_auteur&hash=" .
+	  redirige_par_entete(generer_url_public("spip_cache"), "?purger_squelettes=oui&id_auteur=$connect_id_auteur&hash=" .
 				    calculer_action_auteur("purger_squelettes") .
 				    "&redirect=".  _DIR_RESTREINT_ABS .
 						urlencode($clean_link->getUrl()));
diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index f49833256b7ca94e2bfd2f390120af22044de993..cfb065d8b6adca741d2f8b16e12442e3233c2f73 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -952,7 +952,7 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 	global $options;
 	global $spip_lang_left, $spip_lang_right;
 
-	$image_url = generer_url_ecrire('../spip_image',
+	$image_url = generer_url_public('spip_image',
 					(!$id_article ? "" : ('id_article='.$id_article)));
 
 	$redirect_url = new Link();
@@ -1053,7 +1053,7 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif =
 	global $clean_link;
 	global $id_doc_actif;
 
-	$image_url = generer_url_ecrire('../spip_image',
+	$image_url = generer_url_public('spip_image',
 					(!$id_article ? "" : ('id_article='.$id_article)));
 
 	# HACK!!! simule une mise en page pour affecter les document_vu()
diff --git a/ecrire/inc_export_all.php b/ecrire/inc_export_all.php
index b8563f4a5b24ac1d57a252142263efbc31633f13..79468e9bfda3bf598eea50ad1452061541dfb5d6 100644
--- a/ecrire/inc_export_all.php
+++ b/ecrire/inc_export_all.php
@@ -102,7 +102,7 @@ export_objets($query, "spip_referers", $f, $gz, $etape, 15, _T('info_sauvegarde_
 
 if (!$etape OR $etape == 13){
 	$_fputs ($f, build_end_tag("SPIP")."\n");
-	echo "<p>"._T('info_sauvegarde_reussi_01')."</b><p>"._T('info_sauvegarde_reussi_02', array('archive' => $archive))." <a href='" . generer_url_ecrire("index","") . "'>"._T('info_sauvegarde_reussi_03')."</a> "._T('info_sauvegarde_reussi_04')."\n";
+	echo "<p>"._T('info_sauvegarde_reussi_01')."</b><p>"._T('info_sauvegarde_reussi_02', array('archive' => $archive))." <a href='./'>"._T('info_sauvegarde_reussi_03')."</a> "._T('info_sauvegarde_reussi_04')."\n";
 }
 else {
 	$etape_suivante = $etape + 1;
diff --git a/ecrire/inc_install.php b/ecrire/inc_install.php
index f1c7301e777a120a98bb947aafd69d4d2cb9586f..49d6931bb410ebc8ac47514047aa4cc79948eae3 100644
--- a/ecrire/inc_install.php
+++ b/ecrire/inc_install.php
@@ -14,7 +14,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_ecrire ("inc_minipres");
 include_ecrire ("inc_base");
-include_ecrire ("inc_install");
 define('_FILE_TMP', '_install');
 
 function install()
@@ -158,7 +157,7 @@ function install_6()
 		@unlink(_FILE_CONNECT_INS . _FILE_TMP . _EXTENSION_PHP);
 	}
 
-	echo "<form action='" . generer_url_ecrire("index","") . "' method='post'>";
+	echo "<form action='./' method='POST'>";
 	echo "<DIV align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondl'  VALUE='"._T('bouton_suivant')." >>'>";
 	echo "</FORM>";
 
@@ -183,7 +182,7 @@ function install_5()
 	echo "<p>\n"._T('texte_informations_personnelles_2')." ";
 	echo _T('info_laisser_champs_vides');
 
-	echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='6'>";
 
 	echo "<fieldset><label><B>"._T('info_identification_publique')."</B><BR />\n</label>";
@@ -211,7 +210,7 @@ function install_5()
 		echo "<div style='border: 1px solid #404040; padding: 10px; text-align: left;'>";
 		echo "<b>"._T('info_authentification_externe')."</b>";
 		echo "<p>\n"._T('texte_annuaire_ldap_1');
-		echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+		echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap1'>";
 		echo "<DIV align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondl'  VALUE=\""._T('bouton_acces_ldap')."\">";
 		echo "</FORM>";
@@ -298,7 +297,7 @@ function install_4()
 
 		echo "<B>"._T('info_base_installee')."</B><P>\n"._T('info_etape_suivante_1');
 
-		echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+		echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='5'>";
 
 		echo "<DIV align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondl'  VALUE='"._T('bouton_suivant')." >>'>";
@@ -326,7 +325,7 @@ function install_3()
 	echo aide ("install2");
 	echo "<P>\n";
 
-	echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='4'>";
 	echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
 	echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
@@ -414,7 +413,7 @@ function install_2()
 	if (($db_connect=="0") && $link){
 		echo "<B>"._T('info_connexion_ok')."</B><P> "._T('info_etape_suivante_2');
 
-		echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+		echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='3'>";
 		echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
 		echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
@@ -464,7 +463,7 @@ function install_1()
 		}
 	}
 
-	echo "<p><form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<p><form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='2'>";
 	echo "<fieldset><label><B>"._T('entree_base_donnee_1')."</B><BR />\n</label>";
 	echo _T('entree_base_donnee_2')."<BR />\n";
@@ -492,7 +491,7 @@ function install_()
 
 	$menu_langues = menu_langues('var_lang_ecrire');
 	if (!$menu_langues)
-	  redirige_par_entete(generer_url_ecrire("../spip_test_dirs"));
+	  redirige_par_entete(generer_url_public("spip_test_dirs"));
 	else {
 		install_debut_html();
 	
@@ -506,7 +505,7 @@ function install_()
 
 		echo "<p><div align='center'>".$menu_langues."</div>";
 
-		echo "<p><form action='" . generer_url_ecrire("../spip_test_dirs","") . "' method='get'>";
+		echo "<p><form action='" . generer_url_public("spip_test_dirs","") . "' method='get'>";
 		echo "<DIV align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondl'  VALUE='"._T('bouton_suivant')." >>'>";
 		echo "</FORM>";
 		install_fin_html();
@@ -527,7 +526,7 @@ function install_ldap5()
 	echo "<B>"._T('info_ldap_ok')."</B>";
 	echo "<P>"._T('info_terminer_installation');
 
-	echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='5'>";
 
 	echo "<DIV align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondl'  VALUE='"._T('bouton_suivant')." >>'>";
@@ -578,7 +577,7 @@ function install_ldap4()
 		fputs($myFile, $conn);
 		fclose($myFile);
 
-		echo "<p><form action='" . generer_url_ecrire("install","") . "' method='post'>";
+		echo "<p><form action='" . generer_url_ecrire("install") . "' method='POST'>";
 		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap5'>";
 		echo "<fieldset><label><B>"._T('info_statut_utilisateurs_1')."</B></label><BR />\n";
 		echo _T('info_statut_utilisateurs_2')." ";
@@ -614,7 +613,7 @@ function install_ldap3()
 	$result = @ldap_read($ldap_link, "", "objectclass=*", array("namingContexts"));
 	$info = @ldap_get_entries($ldap_link, $result);
 
-	echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap4'>";
 	echo "<INPUT TYPE='hidden' NAME='adresse_ldap' VALUE=\"$adresse_ldap\">";
 	echo "<INPUT TYPE='hidden' NAME='port_ldap' VALUE=\"$port_ldap\">";
@@ -678,7 +677,7 @@ function install_ldap2()
 	if ($ldap_link && ($r || !$login_ldap)) {
 		echo "<B>"._T('info_connexion_ldap_ok');
 
-		echo "<form action='" . generer_url_ecrire("install","") . "' method='post'>";
+		echo "<form action='" . generer_url_ecrire("install") . "' method='POST'>";
 		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap3'>";
 		echo "<INPUT TYPE='hidden' NAME='adresse_ldap' VALUE=\"$adresse_ldap\">";
 		echo "<INPUT TYPE='hidden' NAME='port_ldap' VALUE=\"$port_ldap\">";
@@ -719,7 +718,7 @@ function install_ldap1()
 		}
 	}
 
-	echo "<p><form action='" . generer_url_ecrire("install","") . "' method='post'>";
+	echo "<p><form action='" . generer_url_ecrire("install") . "' method='POST'>";
 	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap2'>";
 	echo "<fieldset><label><B>"._T('entree_adresse_annuaire')."</B><BR />\n</label>";
 	echo _T('texte_adresse_annuaire_1')."<BR />\n";
@@ -760,11 +759,11 @@ function install_unpack()
   fin_admin($action);
 
   if (@file_exists("../spip_loader" . _EXTENSION_PHP))
-    redirige_par_entete(generer_url_ecrire("../spip_loader"), "?hash=$hash&id_auteur=$connect_id_auteur");
+    redirige_par_entete(generer_url_public("spip_loader"), "?hash=$hash&id_auteur=$connect_id_auteur");
   else if (@file_exists("../spip_unpack" . _EXTENSION_PHP))
-    redirige_par_entete(generer_url_ecrire("../spip_unpack"), "?hash=$hash&id_auteur=$connect_id_auteur");
+    redirige_par_entete(generer_url_public("spip_unpack"), "?hash=$hash&id_auteur=$connect_id_auteur");
   else
-    redirige_par_entete(generer_url_ecrire("../spip_loader"), "?hash=$hash&id_auteur=$connect_id_auteur");
+    redirige_par_entete(generer_url_public("spip_loader"), "?hash=$hash&id_auteur=$connect_id_auteur");
 }
 
 ?>
diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3
index 0387a45d332a0faf1572bab2c98729fcfcc38f5f..e2b4f83fab9537ad4baf792c1b729c3df95ee33d 100644
--- a/ecrire/inc_logos.php3
+++ b/ecrire/inc_logos.php3
@@ -105,7 +105,7 @@ function afficher_logo($racine, $titre, $logo, $id_objet, $id, $redirect) {
 		echo "</a></div>";
 		echo debut_block_invisible(md5($titre));
 		echo $taille;
-		echo "\n<br />[<a href='", generer_url_ecrire("../spip_image", "$id_objet=$id&action=effacer&doc=$fichier&hash_id_auteur=$connect_id_auteur&hash=$hash&redirect=".urlencode($redirect)), "'>",_T('lien_supprimer'),"</a>]";
+		echo "\n<br />[<a href='", generer_url_public("spip_image", "$id_objet=$id&action=effacer&doc=$fichier&hash_id_auteur=$connect_id_auteur&hash=$hash&redirect=".urlencode($redirect)), "'>",_T('lien_supprimer'),"</a>]";
 		echo fin_block();
 		echo "</center></p>";
 	}
@@ -113,7 +113,7 @@ function afficher_logo($racine, $titre, $logo, $id_objet, $id, $redirect) {
 		$hash = calculer_action_auteur("ajouter $racine");
 		echo debut_block_invisible(md5($titre));
 
-		echo "\n\n<form action='" . generer_url_ecrire("../spip_image","") . "' method='POST'
+		echo "\n\n<form action='" . generer_url_public("spip_image","") . "' method='POST'
 			ENCTYPE='multipart/form-data'>
 			<div>";
 		echo "\n<INPUT NAME='redirect' TYPE=Hidden VALUE='$redirect' />";
diff --git a/ecrire/inc_meta.php3 b/ecrire/inc_meta.php3
index 6007182228dd589beae622267f231753e77f32f2..87c72d6b7315f4b60e9c690bbc86cd14b2348f70 100644
--- a/ecrire/inc_meta.php3
+++ b/ecrire/inc_meta.php3
@@ -49,7 +49,7 @@ function ecrire_metas() {
 		$ok = ecrire_fichier (_DIR_SESSIONS.'meta_cache.txt', serialize($meta));
 		if (!$ok && $GLOBALS['connect_statut'] == '0minirezo')
 			echo "<h4 font color=red>"._T('texte_inc_meta_1')
-			." <a href='" . generer_url_ecrire("../spip_test_dirs","") . "'>"._T('texte_inc_meta_2')
+			." <a href='" . generer_url_public("spip_test_dirs","") . "'>"._T('texte_inc_meta_2')
 			."</a> "._T('texte_inc_meta_3')."&nbsp;</h4>\n";
 	}
 }
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 5fa540c1b2cad84aaef8bffe59bd84580705276b..4d6ac737d37fda7e699c27501738437b23554f29 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -2328,7 +2328,7 @@ function init_body($rubrique = "asuivre", $sous_rubrique = "asuivre") {
 if ($spip_display == "4") {
 	// Icones principales
 	echo "<ul>";
-	echo "<li><a href='" . generer_url_ecrire("index") . "'>"._T('icone_a_suivre')."</a>";
+	echo "<li><a href='./'>"._T('icone_a_suivre')."</a>";
 	echo "<li><a href='" . generer_url_ecrire("naviguer") . "'>"._T('icone_edition_site')."</a>";
 	echo "<li><a href='" . generer_url_ecrire("forum_admin"). "'>"._T('titre_forum')."</a>";
 	echo "<li><a href='" . generer_url_ecrire("auteurs") . "'>"._T('icone_auteurs')."</a>";
@@ -2350,7 +2350,7 @@ else {
 	echo "<div class='bandeau-icones'>\n";
 	echo "<table width='$largeur' cellpadding='0' cellspacing='0' border='0' align='center'><tr>\n";
 
-	icone_bandeau_principal (_T('icone_a_suivre'), generer_url_ecrire("index",""), "asuivre-48.png", "asuivre", $rubrique, "", "asuivre", $sous_rubrique);
+	icone_bandeau_principal (_T('icone_a_suivre'), './', "asuivre-48.png", "asuivre", $rubrique, "", "asuivre", $sous_rubrique);
 	icone_bandeau_principal (_T('icone_edition_site'), generer_url_ecrire("naviguer",""), "documents-48$spip_lang_rtl.png", "documents", $rubrique, "", "rubriques", $sous_rubrique);
 	icone_bandeau_principal (_T('titre_forum'), generer_url_ecrire("forum_admin",""), "messagerie-48.png", "redacteurs", $rubrique, "", "forum-interne", $sous_rubrique);
 	icone_bandeau_principal (_T('icone_auteurs'), generer_url_ecrire("auteurs",""), "redacteurs-48.png", "auteurs", $rubrique, "", "redacteurs", $sous_rubrique);
@@ -2664,7 +2664,7 @@ if (true /*$bandeau_colore*/) {
 		echo "<td class='bandeau_couleur' style='text-align: $spip_lang_right; width: 28px;' valign='middle'>";
 
 			if ($auth_can_disconnect) {	
-				echo "<a href='" . generer_url_ecrire("../spip_cookie","logout=$connect_login") . "' class='icone26' onMouseOver=\"changestyle('bandeaudeconnecter','visibility', 'visible');\">" .
+				echo "<a href='" . generer_url_public("spip_cookie","logout=$connect_login") . "' class='icone26' onMouseOver=\"changestyle('bandeaudeconnecter','visibility', 'visible');\">" .
 				  http_img_pack("deconnecter-24.gif", "", "border='0'") . "</a>";
 			}
 		echo "</td>";
@@ -2730,7 +2730,7 @@ if (true /*$gadgets*/) {
 		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(generer_url_ecrire("index"))._T('info_articles_proposes'), "article-24.gif", '', '', false);
+			$gadget .= bandeau_titre_boite2(afficher_plus('./')._T('info_articles_proposes'), "article-24.gif", '', '', false);
 			$gadget .= "<div class='plan-articles'>";
 			while($row = spip_fetch_array($vos_articles)) {
 				$id_article = $row['id_article'];
@@ -2916,7 +2916,7 @@ if (true /*$gadgets*/) {
 	
 		// Deconnection
 		echo "<div class='bandeau_couleur_sous' id='bandeaudeconnecter' style='$spip_lang_right: 0px;'>";
-		echo "<a href='" . generer_url_ecrire("../spip_cookie","logout=$connect_login") . "' class='lien_sous'>"._T('icone_deconnecter')."</a>".aide("deconnect");
+		echo "<a href='" . generer_url_public("spip_cookie","logout=$connect_login") . "' class='lien_sous'>"._T('icone_deconnecter')."</a>".aide("deconnect");
 		echo "</div>";
 	
 		$decal = 0;
@@ -2944,7 +2944,7 @@ if (true /*$gadgets*/) {
 			echo $simple;
 
 			if ($options != "avancees") {		
-				echo "<div>&nbsp;</div><div style='width: 250px; text-align: $spip_lang_left;'>"._T('texte_actualite_site_1')."<a href='" . generer_url_ecrire("index","&set_options=avancees") . "'>"._T('texte_actualite_site_2')."</a>"._T('texte_actualite_site_3')."</div>";
+				echo "<div>&nbsp;</div><div style='width: 250px; text-align: $spip_lang_left;'>"._T('texte_actualite_site_1')."<a href='./?set_options=avancees'>"._T('texte_actualite_site_2')."</a>"._T('texte_actualite_site_3')."</div>";
 			}
 
 		echo "</div>";
@@ -3236,7 +3236,7 @@ function fin_html() {
 	if ($GLOBALS['spip_session'] && $GLOBALS['auteur_session']['ip_change']) {
 		echo 
 		  http_img_pack('rien.gif', " ", "name='img_session' width='0' height='0'"),
-		  http_script("\ndocument.img_session.src='" . generer_url_ecrire('../spip_cookie','change_session=oui') . "'");
+		  http_script("\ndocument.img_session.src='" . generer_url_public('spip_cookie','change_session=oui') . "'");
 	}
 
 	echo "</body></html>\n";
@@ -3253,11 +3253,11 @@ function fin_page($credits='') {
 
 	# ici on en profite pour glisser une tache de fond
 	echo "<div align='right' class='verdana2' style='background: url(\"", 
-	  generer_url_ecrire('../spip_background'),
+	  generer_url_public('spip_background'),
 	  "\");'>";
 
 	if ($spip_display == 4) {
-	  echo "<div><a href='", generer_url_ecrire('index', 'set_disp=2'), "'>",
+	  echo "<div><a href='./?set_disp=2'>",
 	    _T("access_interface_graphique"),
 	    "</a></div>";
 	} else {
@@ -3388,7 +3388,7 @@ function voir_en_ligne ($type, $id, $statut=false, $image='racine-24.gif') {
 	}
 
 	if ($message)
-		icone_horizontale($message, generer_url_ecrire("../spip_redirect","id_$type=$id&var_mode=$en_ligne"), $image, "rien.gif");
+		icone_horizontale($message, generer_url_public("spip_redirect","id_$type=$id&var_mode=$en_ligne"), $image, "rien.gif");
 }
 
 
diff --git a/ecrire/inc_upgrade.php b/ecrire/inc_upgrade.php
index 575f85fb1427cddf066a5d4cd3ec38e304cea5bd..c3f3854ced3b1f5201b3448056816605da0d18d0 100644
--- a/ecrire/inc_upgrade.php
+++ b/ecrire/inc_upgrade.php
@@ -82,7 +82,7 @@ function upgrade_dist()
 
   if ($ok) {
 	$hash = calculer_action_auteur("purger_cache");
-	redirige_par_entete(generer_url_ecrire("../spip_cache"), "?purger_cache=oui&id_auteur=$connect_id_auteur&hash=$hash&redirect=" .  _DIR_RESTREINT_ABS);
+	redirige_par_entete(generer_url_public("spip_cache"), "?purger_cache=oui&id_auteur=$connect_id_auteur&hash=$hash&redirect=" .  _DIR_RESTREINT_ABS);
   }
   else {
 	echo _T('alerte_maj_impossible', array('version' => $spip_version));
diff --git a/ecrire/inc_urls.php3 b/ecrire/inc_urls.php3
index 14feffc684e5addcbe1e35394593613115b7c901..951f7cc49811e95f26ee2e11e42eab3fa7d736b5 100644
--- a/ecrire/inc_urls.php3
+++ b/ecrire/inc_urls.php3
@@ -19,7 +19,7 @@ function generer_url_article($id_article) {
 	if (($row = spip_fetch_array(spip_query(
 	"SELECT statut FROM spip_articles WHERE id_article=$id_article"
 	))) AND ($row['statut'] == 'publie'))
-		return generer_url_ecrire('../spip_redirect',"id_article=$id_article");
+		return generer_url_public('spip_redirect',"id_article=$id_article");
 	else	return generer_url_ecrire('articles',"id_article=$id_article");
 }
 
@@ -27,7 +27,7 @@ function generer_url_rubrique($id_rubrique) {
 	if (($row = spip_fetch_array(spip_query(
 	"SELECT statut FROM spip_rubriques WHERE id_rubrique=$id_rubrique"
 	))) AND ($row['statut'] == 'publie'))
-		return generer_url_ecrire('../spip_redirect',"id_rubrique=$id_rubrique");
+		return generer_url_public('spip_redirect',"id_rubrique=$id_rubrique");
 	else
 	  return generer_url_ecrire('naviguer',"id_rubrique=$id_rubrique");
 }
@@ -36,25 +36,25 @@ function generer_url_breve($id_breve) {
 	if (($row = spip_fetch_array(spip_query(
 	"SELECT statut FROM spip_breves WHERE id_breve=$id_breve"
 	))) AND ($row['statut'] == 'publie'))
-		return generer_url_ecrire('../spip_redirect',"id_breve=$id_breve");
+		return generer_url_public('spip_redirect',"id_breve=$id_breve");
 	else
 		return generer_url_ecrire('breves_voir',"id_breve=$id_breve");
 }
 
 function generer_url_forum($id_forum) {
-	return generer_url_ecrire('../spip_redirect',"id_forum=$id_forum");
+	return generer_url_public('spip_redirect',"id_forum=$id_forum");
 }
 
 function generer_url_mot($id_mot) {
-	return  generer_url_ecrire('../spip_redirect',"id_mot=$id_mot");
+	return  generer_url_public('spip_redirect',"id_mot=$id_mot");
 }
 
 function generer_url_site($id_syndic) {
-	return  generer_url_ecrire('../spip_redirect',"id_syndic=$id_syndic");
+	return  generer_url_public('spip_redirect',"id_syndic=$id_syndic");
 }
 
 function generer_url_auteur($id_auteur) {
-	return generer_url_ecrire('../spip_redirect',"id_auteur=$id_auteur");
+	return generer_url_public('spip_redirect',"id_auteur=$id_auteur");
 }
 
 function generer_url_document($id_document) {
@@ -67,7 +67,7 @@ function generer_url_document($id_document) {
 		} else {
 			if (($GLOBALS['meta']["creer_htaccess"]) != 'oui')
 				return '../' . ($row['fichier']);
-			else 	return generer_url_ecrire('../spip_image',"action=autoriser&doc=$id_document");
+			else 	return generer_url_public('spip_image',"action=autoriser&doc=$id_document");
 		}
 	}
 
diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php
index 939b4c5c5a3c5a75717b82d6169ad6c20e96e2c4..38898d1d65e27ad9b882000419f12899641b02ce 100644
--- a/ecrire/inc_utils.php
+++ b/ecrire/inc_utils.php
@@ -559,4 +559,12 @@ function generer_url_ecrire($script, $args="", $retour="", $retour_args="") {
 			  (!$retour_args ? "" : ('?' . $retour_args))));
 }
 
+// cas particulier des scripts publics appeles a partir de l'espace prive
+// il faudra substituer a l'appel ci-dessous la definition ci-dessus
+// lorsque celle-ci deviendra generique
+
+function generer_url_public($script, $args="", $retour="", $retour_args="") {
+  return generer_url_ecrire("../$script", $args, $retour, $retour_args);
+}
+
 ?>