Browse Source

Simplication des URLs propres (suite de [10203] et [10209]). Les marqueurs de types d'URL sont totalement évacués, car en fait ils n'étaient pas inclus dans la chaîne stockée dans la table SQL, on ne gaspille pas de place dans cette table en les évacuant et l'URL est alors plus agréable à lire. On continue en revanche à les retirer dans les URLS demandées au serveur HTTP afin d'assurer le service pour les anciens signets.

Le .htacces est donc simplifié et mérite d'être recopié à partir du htaccess.txt fourni. Le titre général du seul paramètre page qui y figure encore est désormais '''type_urls''' pour avoir un message d'erreur plus clair lorsque la variable homonyme n'a pas été affectée dans mes_options.

Enfin, le couteux '''charger_generer_url''' qui cherche d'abord les anciens fichiers '''.php3''' n'est plus appelé dans ce cadre qu'en dernier recours, les différentes définitions de '''recuperer_parametre_url''' étant remplacées par la famille '''urls_propres_dist urls_html_dist urls_page_dist''' etc, avec le '''charger_fonction''' usuel. Pour ceux qui ont leur '''type_urls''' personnels, la compatibilité est normalement assurée, mais renommer leur  '''recuperer_parametre_url''' leur fera bénéficier de cette amélioration.
spip-2.0
Committo,Ergo:sum 15 years ago
parent
commit
b58799615a
  1. 2
      .gitattributes
  2. 21
      ecrire/public/parametrer.php
  3. 4
      ecrire/urls/html.php
  4. 5
      ecrire/urls/page.php
  5. 86
      ecrire/urls/propres.php
  6. 5
      ecrire/urls/propres2.php
  7. 9
      ecrire/urls/propres_qs.php
  8. 18
      htaccess.txt

2
.gitattributes vendored

@ -695,7 +695,7 @@ ecrire/typographie/fr.php -text
ecrire/typographie/index.php -text
ecrire/urls/index.php -text
ecrire/urls/page.php -text
ecrire/urls/propres-qs.php -text
ecrire/urls/propres_qs.php -text
ecrire/win_png.htc -text
ecrire/xml/analyser_dtd.php -text
ecrire/xml/atom.php -text

21
ecrire/public/parametrer.php

@ -31,8 +31,6 @@ if (@is_readable(_DIR_TMP."charger_plugins_fonctions.php")){
include_once(_DIR_TMP."charger_plugins_fonctions.php");
}
charger_generer_url(); # pour recuperer_parametres_url
//
// Contexte : lors du calcul d'une page spip etablit le contexte a partir
// des variables $_GET et $_POST, et leur ajoute la date
@ -289,16 +287,25 @@ function public_parametrer_dist($fond, $local='', $cache='') {
// distinguer le premier appel des appels par inclusion
if (!is_array($local)) {
global $contexte;
// ATTENTION, gestion des URLs personnalises (propre etc):
include_spip('inc/filtres'); // pour normaliser_date
// ATTENTION, gestion des URLs transformee par le htaccess
// en appelant la fonction nommee urls_$type_urls
// 1. $contexte est global car cette fonction le modifie.
// 2. $fond est passe par reference, pour la meme raison
// Bref, les URL dites propres ont une implementation sale.
// Interdit de nettoyer, faut assumer l'histoire.
include_spip('inc/filtres'); // pour normaliser_date
global $contexte;
$contexte = calculer_contexte();
if (function_exists("recuperer_parametres_url")) {
recuperer_parametres_url($fond, nettoyer_uri());
$f = charger_fonction($GLOBALS['type_urls'], 'urls', true);
if (!$f) {
// compatibilite < 1.9.3
charger_generer_url();
if (function_exists('recuperer_parametres_url'))
$f = 'recuperer_parametres_url';
}
if ($f) {
$f($fond, nettoyer_uri());
// remettre les globales (bouton "Modifier cet article" etc)
foreach ($contexte as $var=>$val) {
if (substr($var,0,3) == 'id_') $GLOBALS[$var] = $val;

4
ecrire/urls/html.php

@ -73,8 +73,8 @@ function generer_url_document($id_document, $args='', $ancre='') {
}
// http://doc.spip.org/@recuperer_parametres_url
function recuperer_parametres_url($fond, $url) {
// retrouver les parametres d'une URL dite "html"
function urls_html_dist($fond, $url) {
global $contexte;

5
ecrire/urls/page.php

@ -13,7 +13,6 @@
if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
if (!function_exists('generer_url_article')) { // si la place n'est pas prise
####### modifications possibles dans ecrire/mes_options
# on peut indiquer '.html' pour faire joli
define ('_terminaison_urls_page', '');
@ -69,8 +68,8 @@ function generer_url_document($id_document, $args='', $ancre='') {
return generer_url_document_dist($id_document);
}
// http://doc.spip.org/@recuperer_parametres_url
function recuperer_parametres_url(&$fond, $url) {
// retrouve le fond et les parametres d'une URL abregee
function urls_page_dist(&$fond, $url) {
global $contexte;
// Ce bloc gere les urls page et la compatibilite avec les "urls standard"

86
ecrire/urls/propres.php

@ -12,6 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
if (!function_exists('generer_url_article')) { // si la place n'est pas prise
include_spip('base/abstract_sql');
/*
@ -35,27 +36,55 @@ Variante 'qs' (experimentale) : ce systeme fonctionne en "Query-String",
c'est-a-dire sans utilisation de .htaccess ; les adresses sont de la forme
"/?Mon-titre-d-article"
< ?php $type_urls = 'qs'; ? >
*/
define ('_terminaison_urls_propres', '');
define ('_debut_urls_propres', '');
// Ces chaines servaient de marqueurs a l'epoque ou les URL propres devaient
// indiquer la table ou les chercher (articles, auteurs etc).
// Maintenant que ce n'est plus necessaire, elles ne sont la que pour eviter
// d'encombrer l'unique table des URL avec des doublons quasi identiques.
// Si ce n'est pas un probleme, ou si le site est nouveau,
// les definir a '' produira des URL plus jolies.
// indiquer la table ou les chercher (articles, auteurs etc),
// et elles etaient retirees par les preg_match dans la fonction ci-dessous.
// Elles sont a present definies a "" pour avoir des URL plus jolies
// mais les preg_match restent necessaires pour gerer les anciens signets.
/*
define ('_marqueur_rubrique', '-');
define ('_marqueur_auteur', '_');
define ('_marqueur_breve', '+');
define ('_marqueur_site', '@');
define ('_marqueur_mot_d', '+-');
define ('_marqueur_mot_f', '-+');
*/
define ('_marqueur_rubrique', '');
define ('_marqueur_auteur', '');
define ('_marqueur_breve', '');
define ('_marqueur_site', '');
define ('_marqueur_mot_d', '');
define ('_marqueur_mot_f', '');
// Retire les marqueurs de type dans une URL propre ancienne maniere
function retirer_marqueurs_url_propre($url_propre)
{
if (preg_match(',^\+\-(.*?)\-\+$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^-(.*?)-?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^\+(.*?)\+?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^_(.*?)_?$,', $url_propre, $regs)) {
return $regs[1];
}
else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) {
return $regs[1];
}
// les articles n'ont pas de marqueur
return $url_propre;
}
include_spip('base/abstract_sql');
// http://doc.spip.org/@_generer_url_propre
function _generer_url_propre($type, $id_objet) {
@ -241,10 +270,10 @@ function generer_url_document($id_document, $args='', $ancre='') {
return generer_url_document_dist($id_document, $args, $ancre);
}
// http://doc.spip.org/@recuperer_parametres_url
function recuperer_parametres_url(&$fond, $url) {
// retrouve le fond et les parametres d'une URL propre
function urls_propres_dist(&$fond, $url) {
global $contexte;
$id_objet = 0;
$id_objet = $type = 0;
// Migration depuis anciennes URLs ?
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
@ -293,11 +322,10 @@ function recuperer_parametres_url(&$fond, $url) {
$url_propre = preg_replace(',[?].*,', '', $url);
}
// Mode Query-String ?
$adapter_le_fond = false;
if (!$url_propre
AND preg_match(',([?])([^=/?&]+)(&.*)?$,', $GLOBALS['REQUEST_URI'], $r)) {
$url_propre = $r[2];
$adapter_le_fond = true;
}
if (!$url_propre) return;
@ -305,25 +333,9 @@ function recuperer_parametres_url(&$fond, $url) {
// Compatilibite avec propres2
$url_propre = preg_replace(',\.html$,i', '', $url_propre);
// Retirer les marqueurs de type dans l'URL propre
// Detecter les differents types d'objets demandes
// Note: on pourrait evacuer ca maintenant qu'on a une seule table
if (preg_match(',^\+\-(.*?)\-\+$,', $url_propre, $regs)) {
$url_propre = $regs[1];
}
else if (preg_match(',^-(.*?)-?$,', $url_propre, $regs)) {
$url_propre = $regs[1];
}
else if (preg_match(',^\+(.*?)\+?$,', $url_propre, $regs)) {
$url_propre = $regs[1];
}
else if (preg_match(',^_(.*?)_?$,', $url_propre, $regs)) {
$url_propre = $regs[1];
}
else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) {
$url_propre = $regs[1];
}
// les articles n'ont pas de marqueur
// Compatibilite avec les anciennes URL propres
$url_propre = retirer_marqueurs_url_propre($url_propre);
$row = sql_fetch(spip_query("SELECT id_objet, type FROM spip_urls WHERE url=" . _q($url_propre)));
@ -333,14 +345,10 @@ function recuperer_parametres_url(&$fond, $url) {
$contexte[$col_id] = $row['id_objet'];
}
// En mode Query-String, on fixe ici le $fond utilise
if ($adapter_le_fond) {
$fond = $type;
if ($type == 'syndic') $fond = 'site';
}
if ($type AND ($adapter_le_fond OR $fond='type_urls')) {
return;
$fond = ($type == 'syndic') ? 'site' : $type;
}
}
}
} // function_exists
?>

5
ecrire/urls/propres2.php

@ -23,6 +23,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
if (!defined('_terminaison_urls_propres'))
define ('_terminaison_urls_propres', '.html');
include_spip('urls/propres');
function urls_propres2_dist(&$fond, $url) {
$f = charger_fonction('propres', 'urls', true);
if ($f) $f($fond, $url);
}
?>

9
ecrire/urls/propres-qs.php → ecrire/urls/propres_qs.php

@ -20,9 +20,9 @@ mode "Query-String", sans .htaccess ;
<http://mon-site-spip/?-Rubrique->
Attention : le mode 'propres-qs' est moins fonctionnel que le mode 'propres' ou
Attention : le mode 'propres_qs' est moins fonctionnel que le mode 'propres' ou
'propres2'. Si vous pouvez utiliser le .htaccess, ces deux derniers modes sont
preferables au mode 'propres-qs'.
preferables au mode 'propres_qs'.
*/
if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
@ -31,6 +31,9 @@ if (!defined('_terminaison_urls_propres'))
define ('_debut_urls_propres', './?');
include_spip('urls/propres');
function urls_propres_qs_dist(&$fond, $url) {
$f = charger_fonction('propres', 'urls', true);
if ($f) $f($fond, $url);
}
?>

18
htaccess.txt

@ -79,23 +79,7 @@ RewriteRule ^spip_rss\.php3?$ spip.php?action=rss [QSA,L]
# dans ecrire/mes_options.php
# (fichier associe : ecrire/urls/propres.php)
# Les mots-cles
RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$ spip.php?page=mot [QSA,E=url_propre:$0,L]
# Les breves
RewriteRule ^\+[^/\.]+\+?(\.html)?$ spip.php?page=breve [QSA,E=url_propre:$0,L]
# Les rubriques
RewriteRule ^-[^/\.]+-?(\.html)?$ spip.php?page=rubrique [QSA,E=url_propre:$0,L]
# les auteurs
RewriteRule ^_[^/\.]+_?(\.html)?$ spip.php?page=auteur [QSA,E=url_propre:$0,L]
# Les sites
RewriteRule ^@[^/\.]+@?(\.html)?$ spip.php?page=site [QSA,E=url_propre:$0,L]
# Les articles (en dernier car expression plus "large")
RewriteRule ^[^/\.]+(\.html)?$ spip.php?page=article [QSA,E=url_propre:$0,L]
RewriteRule ^[^/\.]+(\.html)?$ spip.php?page=type_urls [QSA,E=url_propre:$0,L]
# Fin URLs "propres" et "propres2"
###

Loading…
Cancel
Save