From f9b2f9f3a218dd977d5d0450128aef6963705ecc Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Wed, 25 Feb 2009 00:11:35 +0000 Subject: [PATCH] reparer la 404 des urls propres, et le mode urls propres_qs --- ecrire/public/assembler.php | 2 +- ecrire/urls/arbo.php | 12 ++++++++---- ecrire/urls/propres.php | 29 +++++++++++++++++++++++------ ecrire/urls/propres_qs.php | 2 +- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 99d10a3b15..c80fffc181 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -88,7 +88,7 @@ function assembler($fond, $connect='') { $a = $renommer($url, $fond); if (is_array($a)) { list($ncontexte, $type, $url_redirect, $nfond) = $a; - if (isset($url_redirect) + if (strlen($url_redirect) AND $url !== $url_redirect) { spip_log("Redirige $url vers $url_redirect"); include_spip('inc/headers'); diff --git a/ecrire/urls/arbo.php b/ecrire/urls/arbo.php index 49894dc461..9acb929342 100644 --- a/ecrire/urls/arbo.php +++ b/ecrire/urls/arbo.php @@ -470,7 +470,10 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') { include_spip('base/abstract_sql'); // chercher dans la table des URLS - // Compatilibite avec .htm/.html et autres terminaisons + // Revenir en utf-8 si encodage type %D8%A7 (farsi) + $url_propre = rawurldecode($url_propre); + + // Compatibilite avec .htm/.html et autres terminaisons $t = array_diff(array_unique(array_merge(array('.html','.htm','/'),url_arbo_terminaison(''))),array('')); if (count($t)) $url_propre = preg_replace('{(' @@ -512,7 +515,7 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') { } else { // un segment est inconnu - if ($entite=='type_urls') { + if ($entite=='' OR $entite=='type_urls') { // on genere une 404 comme il faut si on ne sait pas ou aller return array(array(),'404'); } @@ -521,12 +524,13 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') { } // gerer le retour depuis des urls propres - if ($entite=='type_urls' AND $GLOBALS['profondeur_url']<=0){ + if (($entite=='' OR $entite=='type_urls') + AND $GLOBALS['profondeur_url']<=0){ $urls_anciennes = charger_fonction('propres','urls'); return $urls_anciennes($url_propre,$entite); } } - if ($entite=='type_urls') { + if ($entite=='' OR $entite=='type_urls' /* compat .htaccess 2.0 */) { if ($type) $entite = ($type == 'syndic') ? 'site' : $type; else { diff --git a/ecrire/urls/propres.php b/ecrire/urls/propres.php index 739cf6c3ea..edaf65d66c 100644 --- a/ecrire/urls/propres.php +++ b/ecrire/urls/propres.php @@ -410,16 +410,19 @@ function urls_propres_dist($i, $entite, $args='', $ancre='') { include_spip('base/abstract_sql'); // chercher dans la table des URLS - // Compatilibite avec propres2 + // Compatibilite avec propres2 $url_propre = preg_replace(',\.html$,i', '', $url_propre); - + + // Revenir en utf-8 si encodage type %D8%A7 (farsi) + $url_propre = rawurldecode($url_propre); + // Compatibilite avec les anciens marqueurs d'URL propres // Tester l'entree telle quelle (avec 'url_libre' des sites ont pu avoir des entrees avec marqueurs dans la table spip_urls) if (!$row = sql_fetsel('id_objet, type, date', 'spip_urls', 'url='.sql_quote($url_propre))) { // Sinon enlever les marqueurs eventuels - $url_propre = retirer_marqueurs_url_propre($url_propre); + $url_propre2 = retirer_marqueurs_url_propre($url_propre); - $row = sql_fetsel('id_objet, type, date', 'spip_urls', 'url='.sql_quote($url_propre)); + $row = sql_fetsel('id_objet, type, date', 'spip_urls', 'url='.sql_quote($url_propre2)); } if ($row) { @@ -443,12 +446,26 @@ function urls_propres_dist($i, $entite, $args='', $ancre='') { } } - if ($entite=='type_urls') { + if ($entite=='' OR $entite=='type_urls' /* compat .htaccess 2.0 */) { if ($type) $entite = ($type == 'syndic') ? 'site' : $type; else { $entite = '404'; - $contexte['erreur'] = ''; // qu'afficher ici ? l'url n'existe pas... on ne sait plus dire de quel type d'objet il s'agit + $contexte['erreur'] = ''; + // l'url n'existe pas... + // on ne sait plus dire de quel type d'objet il s'agit + + // sauf si on a le marqueur. et la c'est un peu sale... + if (_MARQUEUR_URL) { + $fmarqueur = @array_flip(unserialize(_MARQUEUR_URL)); + preg_match(',^([+][-]|[-+@_]),', $url_propre, $regs); + $objet = $regs ? substr($fmarqueur[$regs[1]],0,n-1) : 'article'; + $contexte['erreur'] = _T( + ($objet=='rubrique' OR $objet=='breve') + ? 'public:aucune_'.$objet + : 'public:aucun_'.$objet + ); + } } } diff --git a/ecrire/urls/propres_qs.php b/ecrire/urls/propres_qs.php index 53b1e13704..f8d439e5a7 100644 --- a/ecrire/urls/propres_qs.php +++ b/ecrire/urls/propres_qs.php @@ -34,6 +34,6 @@ define ('_debut_urls_propres', './?'); // http://doc.spip.org/@urls_propres_qs_dist function urls_propres_qs_dist($i, &$entite, $args='', $ancre='') { $f = charger_fonction('propres', 'urls'); - return preg_replace(",^\.\./\./,","../",$f($i, $entite, $args, $ancre)); + return $f($i, $entite, $args, $ancre); } ?> -- GitLab