From 69e88a54b7462606e407534f20933885b337e6a3 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 13 Nov 2005 15:50:47 +0000 Subject: [PATCH] Permettre un mode d'URLs "propres-qs", c'est-a-dire qui fonctionne a partir de la "query-string", sans .htaccess ; au passage petit nettoyage dans ecrire/inc_version.php3 A noter : ce mode d'URLs donne des pages de la forme /?Titre-de-l-article et /?-Nom-de-la-rubrique et n'est a utiliser que dans le cas ou les .htaccess sont interdits --- .gitattributes | 1 + ecrire/inc_version.php3 | 13 +++++-------- inc-urls-propres-qs.php3 | 36 ++++++++++++++++++++++++++++++++++++ inc-urls-propres.php3 | 38 +++++++++++++++++++++++++++++--------- 4 files changed, 71 insertions(+), 17 deletions(-) create mode 100644 inc-urls-propres-qs.php3 diff --git a/.gitattributes b/.gitattributes index 4e33fbf15b..3b1e8dd27c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -305,6 +305,7 @@ ecrire/safehtml/license.txt -text ecrire/safehtml/readme-SPIP.txt -text ecrire/safehtml/readme.txt -text ecrire/statistiques_repartition.php -text +/inc-urls-propres-qs.php3 -text plugins/ancres/version.php -text plugins/podcast_client/podcast_client.php -text plugins/podcast_client/version.php -text diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 62f344f19f..f1128019cf 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -576,12 +576,6 @@ if (!$REQUEST_URI) { $REQUEST_URI .= '?'.$QUERY_STRING; } -if (!$PATH_TRANSLATED) { - if ($SCRIPT_FILENAME) $PATH_TRANSLATED = $SCRIPT_FILENAME; - else if ($DOCUMENT_ROOT && $SCRIPT_URL) $PATH_TRANSLATED = $DOCUMENT_ROOT.$SCRIPT_URL; -} - - // API d'appel a la base de donnees function spip_query($query) { @@ -767,8 +761,11 @@ class Link { $url = $this->file; if (!$url) $url = './'; $query = ''; - foreach($this->vars as $name => $value) - $query .= '&'.$name.'='.urlencode($value); + foreach($this->vars as $name => $value) { + $query .= '&'.$name; + if (strlen($value)) + $query .= '='.urlencode($value); + } foreach ($this->arrays as $name => $table) foreach ($table as $value) diff --git a/inc-urls-propres-qs.php3 b/inc-urls-propres-qs.php3 new file mode 100644 index 0000000000..931887941f --- /dev/null +++ b/inc-urls-propres-qs.php3 @@ -0,0 +1,36 @@ +<?php + + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2005 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + + +/* + +Ce jeu d'URLs est une variante de inc-urls-propres, qui ajoute +le prefixe './?' aux adresses, ce qui permet de l'utiliser en +mode "Query-String", sans .htaccess ; + + <http://mon-site-spip/?-Rubrique-> + +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'. + +*/ + +if (!defined('_terminaison_urls_propres')) + define ('_terminaison_urls_propres', ''); + +define ('_debut_urls_propres', './?'); + +include('inc-urls-propres.php3'); + +?> diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3 index 22b325a61a..c81eb003fa 100644 --- a/inc-urls-propres.php3 +++ b/inc-urls-propres.php3 @@ -28,14 +28,21 @@ Definissez ensuite dans ecrire/mes_options.php3 : type_urls = 'propres'; SPIP calculera alors ses liens sous la forme "Mon-titre-d-article". -Variante : +Variante 'propres2' : type_urls = 'propres2'; ajoutera '.html' aux adresses generees : "Mon-titre-d-article.html" +Variante 'qs' : ce systeme fonctionne en "Query-String", c'est-a-dire +sans utilisation de .htaccess ; les adresses sont de la forme +"/?Mon-titre-d-article" + type_urls = 'qs'; + */ if (!defined('_terminaison_urls_propres')) define ('_terminaison_urls_propres', ''); +if (!defined('_debut_urls_propres')) + define ('_debut_urls_propres', ''); function _generer_url_propre($type, $id_objet) { $table = "spip_".table_objet($type); @@ -130,7 +137,7 @@ function _generer_url_propre($type, $id_objet) { function generer_url_article($id_article) { $url = _generer_url_propre('article', $id_article); if ($url) - return $url . _terminaison_urls_propres; + return _debut_urls_propres . $url . _terminaison_urls_propres; else return "article.php3?id_article=$id_article"; } @@ -138,7 +145,7 @@ function generer_url_article($id_article) { function generer_url_rubrique($id_rubrique) { $url = _generer_url_propre('rubrique', $id_rubrique); if ($url) - return '-'.$url.'-'._terminaison_urls_propres; + return _debut_urls_propres . '-'.$url.'-'._terminaison_urls_propres; else return "rubrique.php3?id_rubrique=$id_rubrique"; } @@ -146,7 +153,7 @@ function generer_url_rubrique($id_rubrique) { function generer_url_breve($id_breve) { $url = _generer_url_propre('breve', $id_breve); if ($url) - return '+'.$url.'+'._terminaison_urls_propres; + return _debut_urls_propres . '+'.$url.'+'._terminaison_urls_propres; else return "breve.php3?id_breve=$id_breve"; } @@ -159,7 +166,7 @@ function generer_url_forum($id_forum, $show_thread=false) { function generer_url_mot($id_mot) { $url = _generer_url_propre('mot', $id_mot); if ($url) - return '+-'.$url.'-+'._terminaison_urls_propres; + return _debut_urls_propres . '+-'.$url.'-+'._terminaison_urls_propres; else return "mot.php3?id_mot=$id_mot"; } @@ -167,7 +174,7 @@ function generer_url_mot($id_mot) { function generer_url_auteur($id_auteur) { $url = _generer_url_propre('auteur', $id_auteur); if ($url) - return '_'.$url.'_'._terminaison_urls_propres; + return _debut_urls_propres . '_'.$url.'_'._terminaison_urls_propres; else return "auteur.php3?id_auteur=$id_auteur"; } @@ -175,7 +182,7 @@ function generer_url_auteur($id_auteur) { function generer_url_site($id_syndic) { $url = _generer_url_propre('site', $id_syndic); if ($url) - return '@'.$url.'@'._terminaison_urls_propres; + return _debut_urls_propres . '@'.$url.'@'._terminaison_urls_propres; else return "site.php3?id_syndic=$id_syndic"; } @@ -190,7 +197,7 @@ function generer_url_document($id_document) { return ''; } -function recuperer_parametres_url($fond, $url) { +function recuperer_parametres_url(&$fond, $url) { global $contexte; // Migration depuis anciennes URLs ? @@ -214,12 +221,21 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html return; } + // Chercher les valeurs d'environnement qui indiquent l'url-propre $url_propre = $GLOBALS['_SERVER']['REDIRECT_url_propre']; - if (!$url_propre) $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre']; + if (!$url_propre) + $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre']; if (!$url_propre) { $url = substr($url, strrpos($url, '/') + 1); $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; // Compatilibite avec propres2 @@ -261,6 +277,10 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html $contexte[$col_id] = $row[$col_id]; } + // En mode Query-String, on fixe ici le $fond utilise + if ($adapter_le_fond) + $fond = $type; + return; } -- GitLab