diff --git a/ecrire/inc_auth.php3 b/ecrire/inc_auth.php3 index cf8eefbe8c70e1c82caac3dc5aba20ff07f3e83a..72bb79c9967b491d0a9772a284dbda5aee1b5fa5 100644 --- a/ecrire/inc_auth.php3 +++ b/ecrire/inc_auth.php3 @@ -101,11 +101,11 @@ function auth_dist() { if ($_GET['bonjour'] == 'oui') $clean_link->delVar('bonjour'); $url = str_replace('/./', '/', _DIR_LOGGED_IN. $clean_link->getUrl()); - redirige_par_entete(generer_url_public('spip_login'),"?url=".urlencode($url)); - exit; + redirige_par_entete(generer_url_public('spip_login'), + "?url=".urlencode($url)); + exit; # pour etre vraiment surs :) } - // // Chercher le login dans la table auteurs // diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php index 2b21c1fe7fff7ae73270582090d58a7c9b799444..c4870730943935684c3870e152bbe297b4f33b1b 100644 --- a/ecrire/inc_utils.php +++ b/ecrire/inc_utils.php @@ -545,6 +545,18 @@ function redirige_par_entete($url, $fin="") { # spip_log("redirige $url$fin"); include_ecrire('inc_headers'); spip_header("Location: $url$fin"); + + echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>302 Found</title> +</head> +<body> +<h1>302 Found</h1> +<a href="' +.quote_amp("$url$fin") +.'">Click here</a>.<p> +</body></html>'; + exit; } @@ -640,7 +652,32 @@ function charger_generer_url() { include_local("inc-urls-".$GLOBALS['type_urls']); } -// Fonctions de fabriction des URL des scripts de Spip + +// +// Fonctions de fabrication des URL des scripts de Spip +// + +// l'URL de base du site, sans se fier a meta(adresse_site) qui peut etre fausse +// (sites a plusieurs noms d'hotes, deplacements, erreurs) +function url_de_base() { + global $_SERVER; + global $REQUEST_URI; + + static $url; + + if ($url) + return $url; + + $http = (substr($_SERVER["SCRIPT_URI"],0,5) == 'https') ? 'https' : 'http'; + # note : HTTP_HOST contient le :port si necessaire + $myself = $http.'://' .$_SERVER['HTTP_HOST'].$REQUEST_URI; + + # supprimer (ecrire/)?xxxxx + $url = preg_replace(',/('._DIR_RESTREINT_ABS.')?[^/]*$,', '/', $myself); + return $url; +} + + // Pour une redirection, la liste des arguments doit etre separee par "&" // Pour du code XHTML, ca doit etre & // Bravo au W3C qui n'a pas ete capable de nous eviter ca @@ -650,30 +687,23 @@ function charger_generer_url() { // http://httpd.apache.org/docs/2.0/mod/mod_dir.html function generer_url_ecrire($script, $args="", $no_entities=false, $rel=false) { - $site = $rel ? "" : $GLOBALS['meta']["adresse_site"]; - if ($site) - $site .= ((substr($site,-1) <> '/') ? '/' : '') . _DIR_RESTREINT_ABS; - else $site = _DIR_RESTREINT; - - if (!$site) - $site = './'; - elseif (substr($site,-1) != '/') { - $site .= '/'; - } + + if (!$rel) + $ecrire = url_de_base() . _DIR_RESTREINT_ABS; + else + $ecrire = _DIR_RESTREINT ? _DIR_RESTREINT : './'; $ext=(ereg('.php[3]?$', $script) ? '' :_EXTENSION_PHP).($args ? "?" : ""); if (!$no_entities) $args = str_replace('&', '&', $args); - return "$site$script$ext$args"; + return "$ecrire$script$ext$args"; } // scripts publics appeles a partir de l'espace prive ou de l'exterieur (mail) - function generer_url_public($script, $args="", $no_entities=false) { - $site = $GLOBALS['meta']["adresse_site"]; - if ($site) - $site .= ((substr($site,-1) <> '/') ? '/' : ''); - else $site = _DIR_RACINE; + + $site = url_de_base(); + if (!$no_entities) $args = str_replace('&', '&', $args); $ext = (ereg('.php[3]?$', $script) ? '' :_EXTENSION_PHP).($args ? '?' : ""); return $site . $script . $ext . $args; diff --git a/inc-cache.php3 b/inc-cache.php3 index e0079dea80cc4af06a17e9ebcf9074db822bf31c..10bdb047008480bbef19e13266ee597e97b059a6 100644 --- a/inc-cache.php3 +++ b/inc-cache.php3 @@ -18,6 +18,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // la fonction retire_cache() // function generer_nom_fichier_cache($contexte='', $fond='') { + global $_SERVER; global $flag_gz; if (!$contexte) { @@ -41,7 +42,7 @@ function generer_nom_fichier_cache($contexte='', $fond='') { $fichier_cache = 'INDEX-'; // morceau de md5 selon HOST et $fond - $md_cache = md5($fichier_requete . $GLOBALS['HTTP_HOST'] . $fond); + $md_cache = md5($fichier_requete . $_SERVER['HTTP_HOST'] . $fond); $fichier_cache .= '.'.substr($md_cache, 1, 8); // Sous-repertoires 0...9a..f/