Valider efbae7cd rédigé par Fil's avatar Fil
Parcourir les fichiers

perte de variables dans les redirections d'anciennes urls :...

perte de variables dans les redirections d'anciennes urls : spip.php?page=mot&id_mot=10&id_rubrique=1

- en spip 2.0.3 affiche la page demande

- en spip 2.0.5 renvoie vers l'url  +-TITRE_DU_MOT-+.html
le parametre id_rubrique est perdu
(acatonne)
parent 1f12f7bc
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+9 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -433,13 +433,18 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') {
		}
	}
	if ($id_objet) {
		$url_propre = generer_url_entite($id_objet, $type, $args, $ancre);
		$contexte = array($_id => $id_objet);
		$url_propre = generer_url_entite($id_objet, $type);
		if (strlen($url_propre)
		AND !strstr($url,$url_propre)) {
			$reste = preg_replace('/^&/','?',
				preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5]));
			$url_redirect = "$url_propre$reste";
			list(,$hash) = explode('#', $url_propre);
			$args = array();
			foreach(explode('&', $regs[2]) as $fragment) {
				if ($fragment != "$_id=$id_objet")
					$args[] = $fragment;
			}
			$url_redirect = generer_url_entite($id_objet, $type, join('&',array_filter($args)), $hash);

			return array($contexte, $type, $url_redirect);
		}
	}
+12 −21
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -343,36 +343,27 @@ function urls_propres_dist($i, $entite, $args='', $ancre='') {
		$objets = 'article|breve|rubrique|mot|auteur|site|syndic';
		if (preg_match(
		',(?:^|/|[?&](?:page=)?)('.$objets
		.')(?:\.php3?|(?:[?&]id_(?:\1)=)?([0-9]+)(?:\.html)?)'
		.'(?:[?&].*)?$,', $url, $regs)) {
		.')((?:\.php3?|(?:.*[?&]id_(?:\1)=)?([0-9]+)(?:\.html)?)'
		.'(?:[?&].*)?)$,', $url, $regs)) {
			$type = preg_replace(',s$,', '', table_objet($regs[1]));
			$_id = id_table_objet($regs[1]);
			$id_objet = $regs[2];
			$suite = $regs[2];
			$id_objet = $regs[3];
		}
	}
	if ($id_objet) {
		$url_propre = generer_url_entite($id_objet, $type, $args, $ancre);
		$contexte = array($_id => $id_objet);
		$url_propre = generer_url_entite($id_objet, $type);
		if (strlen($url_propre)
		AND !strstr($url,$url_propre)) {
			$reste = preg_replace('/^&/','?',
				preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5]));
			$url_redirect = "$url_propre$reste";
			return array($contexte, $type, $url_redirect);
		}
			list(,$hash) = explode('#', $url_propre);
			$args = array();
			foreach(explode('&', $regs[2]) as $fragment) {
				if ($fragment != "$_id=$id_objet")
					$args[] = $fragment;
			}
	/* Fin compatibilite anciennes urls */
			$url_redirect = generer_url_entite($id_objet, $type, join('&',array_filter($args)), $hash);

	if ($id_objet) {
		$url_propre = generer_url_entite($id_objet, $type, $args, $ancre);
		$contexte = array($id_table_objet => $id_objet);
		if (strlen($url_propre)
		AND !strstr($url,$url_propre)) {
			include_spip('inc/headers');
			// recuperer les arguments supplementaires (&debut_xxx=...)
			$reste = preg_replace('/^&/','?',
				preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5]));
			$url_redirect = "$url_propre$reste";
			return array($contexte, $type, $url_redirect);
		}
	}