diff --git a/htaccess-propres.txt b/htaccess-propres.txt index 6478b40bdc41230ade8340840260dbd2cd15286e..cd99904ed4e43db877b0f69bc1740b906414bfa1 100644 --- a/htaccess-propres.txt +++ b/htaccess-propres.txt @@ -1,6 +1,6 @@ ########################################################### # Fichier .htaccess pour les URLs propres ; a installer # -# si vous reglez $type_urls='propres' # +# si vous reglez $type_urls='propres' ou 'propres2' # # dans ecrire/mes_options.php3 # # (fichier associe : inc-urls-propres.php3) # # # @@ -9,8 +9,27 @@ RewriteEngine On -### si votre site est en sous-domaine, preciser ci-dessous -# RewriteBase /sous/domaine/ +### Si votre site est dans un sous-repertoire, preciser ci-dessous +# RewriteBase /sous/repertoire/ + + + + +################ DEBUT HTACCESS SPIP ###################### + +### Supprimez le '#' de la ligne ci-dessous si votre hebergement +### lit les .php3 avec php3 au lieu de php4 ou php5 (sans garantie!) +# AddType x-mapp-php4 .php3 + + +### +# Si le fichier ou repertoire existe, ignorer toutes les regles suivantes +RewriteCond %{REQUEST_FILENAME} -f +RewriteRule "." - [skip=100] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule "." - [skip=100] +# +### ### # Compatibilite avec les URLS "html" (pour transition sympa) @@ -22,33 +41,33 @@ RewriteRule ^auteur([0-9]+)\.html$ auteur.php3?id_auteur=$1 [QSA,L] # Fin compatibilite ### +### +# URLs "propres" et "propres2" + # Rediriger les mots et breves sans le "+" final -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(\+[^/\.\+]+)(\.html)?$ /$1+$2 [QSA,R] # Les mots-cles -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^\+-[^/\.]+-\+(\.html)?$ mot.php3 [QSA,E=url_propre:$0,L] # Les breves -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^\+[^/\.]+\+(\.html)?$ breve.php3 [QSA,E=url_propre:$0,L] # Les rubriques -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^-[^/\.]+-(\.html)?$ rubrique.php3 [QSA,E=url_propre:$0,L] # les auteurs -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^_[^/\.]+(\.html)?$ auteur.php3 [QSA,E=url_propre:$0,L] # Les articles (en dernier car expression plus "large") -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^[^/\.]+(\.html)?$ article.php3 [QSA,E=url_propre:$0,L] +# Fin URLs "propres" et "propres2" +### + +# rediriger les .php3 errones vers .php +RewriteCond %{REQUEST_FILENAME} (.*\.php)3$ +RewriteCond $1 -f +RewriteRule . $1 [QSA,L] + +################ FIN HTACCESS SPIP ######################## diff --git a/htaccess.txt b/htaccess.txt new file mode 100644 index 0000000000000000000000000000000000000000..d207712cd41d56edbd1eb002e3ff75dc73306dba --- /dev/null +++ b/htaccess.txt @@ -0,0 +1,101 @@ +############################################################## +# Fichier .htaccess SPIP v1.8 # +# # +# Permet de controler les URLs et la version de php utilisee # +# Compatible avec les URLs 'html', 'propres' et 'propres2' # +# Permet aussi d'effectuer la transition de .PHP 3 vers .PHP # +# # +# Pour utiliser ce fichier renommez-le '.htaccess' dans le # +# repertoire racine du site, en veillant a ne pas ecraser un # +# .htaccess personnalise qui s'y trouverait deja # +# # +# Attention certains hebergeurs desactivent tout ou partie # +# des fonctions du fichier .htaccess ; celui-ci est donc # +# indicatif - en cas de difficulte voir sur les forums SPIP # +############################################################## + +RewriteEngine On + + +################ CONFIGURATION ###################### + +### Configuration sous-repertoire +# Si votre site est dans un sous-repertoire, preciser ci-dessous +# le nom du sous-repertoire, et supprimer le '#' + +#RewriteBase /sous/repertoire/ + + +### Version PHP 3 +# Si vous utilisez une distribution 'PHP 3' de SPIP, et si votre +# hebergement execute encore les .php[3] avec un moteur PHP 3 +# au lieu de PHP 4, vous pouvez decommenter la ligne ci-dessous +# pour faire fonctionner les fichiers sous php4 (sans garantie) + +#AddType x-mapp-php4 .php3 + + +# SPIP version 'php' - si vous avez d'anciennes adresses en '.php[3]', +# supprimez le '#' sur les lignes qui suivent pour rediriger les acces +# errones vers le .php correspondant + +#RewriteCond %{REQUEST_FILENAME} -f +#RewriteRule ^(.+)\.php[3]$ $1.php [QSA,L] + +# Fin version +### + + +################ REGLAGES PERSONNALISES ###################### +# Inscrivez ci-dessous vos reglages supplementaires + + + + +################ GESTIONS DES URLS SPIP ####################### + +### +# Si le fichier ou repertoire demande existe +# ignorer toutes les regles qui suivent +RewriteCond %{REQUEST_FILENAME} -f +RewriteRule "." - [skip=100] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule "." - [skip=100] +# +### + + +### +# Compatibilite avec les URLS "html" (pour transition sympa) +# voir fichier inc-urls-html.php3 +RewriteRule ^rubrique([0-9]+)\.html$ rubrique.php3?id_rubrique=$1 [QSA,L] +RewriteRule ^article([0-9]+)\.html$ article.php3?id_article=$1 [QSA,L] +RewriteRule ^breve([0-9]+)\.html$ breve.php3?id_breve=$1 [QSA,L] +RewriteRule ^mot([0-9]+)\.html$ mot.php3?id_mot=$1 [QSA,L] +RewriteRule ^auteur([0-9]+)\.html$ auteur.php3?id_auteur=$1 [QSA,L] +# Fin compatibilite +### + +### +# URLs "propres" et "propres2" +# pensez a regler $type_urls='propres' ou 'propres2' +# dans ecrire/mes_options.php3 +# (fichier associe : inc-urls-propres.php3) + +# Les mots-cles +RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$ mot.php3 [QSA,E=url_propre:$0,L] + +# Les breves +RewriteRule ^\+[^/\.]+\+?(\.html)?$ breve.php3 [QSA,E=url_propre:$0,L] + +# Les rubriques +RewriteRule ^-[^/\.]+-?(\.html)?$ rubrique.php3 [QSA,E=url_propre:$0,L] + +# les auteurs +RewriteRule ^_[^/\.]+_?(\.html)?$ auteur.php3 [QSA,E=url_propre:$0,L] + +# Les articles (en dernier car expression plus "large") +RewriteRule ^[^/\.]+(\.html)?$ article.php3 [QSA,E=url_propre:$0,L] + +# Fin URLs "propres" et "propres2" +### diff --git a/inc-urls-html.php3 b/inc-urls-html.php3 index 3dad37274609c396874750f6480211d742706716..3b1e20d216e867605f1dcd35a7b304539a1155cf 100644 --- a/inc-urls-html.php3 +++ b/inc-urls-html.php3 @@ -14,19 +14,22 @@ - Comment utiliser ce jeu d'URLs ? -Il faut recopier le fichier htaccess-propres.txt sous le nom .htaccess -dans le repertoire de base du site SPIP (attention a ne pas ecraser -d'autres reglages que vous pourriez avoir mis dans ce fichier) ; si votre site -est en "sous-repertoire", vous devrez editer la ligne "RewriteBase" ce fichier. +Recopiez le fichier "htaccess.txt" du repertoire de base du site SPIP sous +le sous le nom ".htaccess" (attention a ne pas ecraser d'autres reglages +que vous pourriez avoir mis dans ce fichier) ; si votre site est en +"sous-repertoire", vous devrez aussi editer la ligne "RewriteBase" ce fichier. +Les URLs definies seront alors redirigees vers les fichiers de SPIP. -definissez ensuite dans ecrire/mes_options.php3 : +Definissez ensuite dans ecrire/mes_options.php3 : type_urls = 'html'; -Note : le fichier htaccess-propres.txt est compatible avec les URLS 'html' ; -toutefois si htaccess-propres.txt se revele trop "puissant", car trop generique, -et conduit a des problemes (en lien par exemple avec d'autres applications -installees dans votre repertoire, a cote de SPIP), vous pouvez utiliser a la -place le fichier htaccess-html.txt, qui est suffisant pour ce type d'urls. +SPIP calculera alors ses liens sous la forme "article123.html". + + +Note : si le fichier htaccess.txt se revele trop "puissant", car trop +generique, et conduit a des problemes (en lien par exemple avec d'autres +applications installees dans votre repertoire, a cote de SPIP), vous +pouvez l'editer pour ne conserver que la partie concernant les URLS 'html'. */ diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3 index 82314784730b647f3af14c49661f40f55d33a664..29a8038b325214696ee1bc4ce9e7e227036599c3 100644 --- a/inc-urls-propres.php3 +++ b/inc-urls-propres.php3 @@ -19,16 +19,19 @@ define("_INC_URLS2", "1"); - Comment utiliser ce jeu d'URLs ? -Il faut recopier le fichier htaccess-propres.txt sous le nom .htaccess -dans le repertoire de base du site SPIP (attention a ne pas ecraser -d'autres reglages que vous pourriez avoir mis dans ce fichier) ; si votre site -est en "sous-repertoire", vous devrez editer la ligne "RewriteBase" ce fichier. +Recopiez le fichier "htaccess.txt" du repertoire de base du site SPIP sous +le sous le nom ".htaccess" (attention a ne pas ecraser d'autres reglages +que vous pourriez avoir mis dans ce fichier) ; si votre site est en +"sous-repertoire", vous devrez aussi editer la ligne "RewriteBase" ce fichier. +Les URLs definies seront alors redirigees vers les fichiers de SPIP. -definissez ensuite dans ecrire/mes_options.php3 : +Definissez ensuite dans ecrire/mes_options.php3 : type_urls = 'propres'; -ou +SPIP calculera alors ses liens sous la forme "Mon-titre-d-article". + +Variante : type_urls = 'propres2'; -pour ajouter '.html' aux adresses generees. +ajoutera '.html' aux adresses generees : "Mon-titre-d-article.html" */ @@ -157,7 +160,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 '_'.$url.'_'._terminaison_urls_propres; else return "auteur.php3?id_auteur=$id_auteur"; } @@ -202,19 +205,19 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur)(\.php3?|[0-9]+\.html)([?& $url_propre = preg_replace(',\.html$,i', '', $url_propre); // Detecter les differents types d'objets demandes - if (preg_match(',^\+-(.*?)-\+$,', $url_propre, $regs)) { + if (preg_match(',^\+-(.*?)-?\+?$,', $url_propre, $regs)) { $type = 'mot'; $url_propre = $regs[1]; } - else if (preg_match(',^-(.*)-$,', $url_propre, $regs)) { + else if (preg_match(',^-(.*)-?$,', $url_propre, $regs)) { $type = 'rubrique'; $url_propre = $regs[1]; } - else if (preg_match(',^\+(.*)\+$,', $url_propre, $regs)) { + else if (preg_match(',^\+(.*)\+?$,', $url_propre, $regs)) { $type = 'breve'; $url_propre = $regs[1]; } - else if (preg_match(',^_(.*)$,', $url_propre, $regs)) { + else if (preg_match(',^_(.*)_?$,', $url_propre, $regs)) { $type = 'auteur'; $url_propre = $regs[1]; } @@ -229,8 +232,7 @@ preg_match(',(^|/)((article|breve|rubrique|mot|auteur)(\.php3?|[0-9]+\.html)([?& $query = "SELECT $col_id FROM $table WHERE url_propre='".addslashes($url_propre)."'"; $result = spip_query($query); - if (spip_num_rows($result) == 1) { - $row = spip_fetch_array($result); + if ($row = spip_fetch_array($result)) { $contexte[$col_id] = $row[$col_id]; }