SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

246 Plugins, 178 contribs sur SPIP-Zone, 248 visiteurs en ce moment

Accueil du site > Statistiques et référencement > Réécriture d’URL > Une arborescence virtuelle dans l’URL

Une arborescence virtuelle dans l’URL

24 juin 2003 – par Nicolas Hoizey – 64 commentaires

1 vote

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Difficile de faire connaître des pages de votre site en donnant les URLs quelque peu absconses utilisées nativement par SPIP. Voilà de quoi rendre tout cela bien plus agréable à l’oeil...

J’en avais assez de donner à mes utilisateurs de phpMyChat une URL du type suivant :

http://www.phpheaven.net/rubrique.php3?id_rubrique=14

J’ai donc regardé ce qui est faisable avec la gestion d’URL de SPIP, et en m’inspirant des contributions de Fil [1] et Dan Hetzel [2], je peux maintenant leur fournir une URL bien plus simple :

http://www.phpheaven.net/projects/phpmychat/rubrique14.html

Et je peux même aller plus loin pour une rubrique, avec une URL encore plus simple :

http://www.phpheaven.net/projects/phpmychat/

Un avantage supplémentaire est que ce type d’URL est à priori recommandé pour faciliter le référencement d’un site [3].

Comment ça marche ?

Déjà, voyons comment générer de telles URL

La génération des URL utilisées par SPIP via les tags #URL_ARTICLE ou #URL_RUBRIQUE se configure via le script inc-urls.php3.

Pour phpHeaven, j’ai donné à ces URL le nom friendly.

J’ai donc créé un fichier inc-urls-friendly.php3, que vous pouvez télécharger ci-dessous :

Zip - 852 octets
inc-urls-friendly.php3
Le script de génération des URL

J’ai ensuite fait référence à ce script dans inc-urls.php3 avec la ligne suivante :

$type_urls = 'friendly';

Voyons un peu ce que fait ce script :

-  Une première fonction nommée text2sys transforme toute chaîne de caractères en une chaîne plus simple, sans caractères spéciaux, accents ni caractères d’espacement. Ainsi, Chronique d'une licence non annoncée [4] devient chronique_d_une_licence_non_annoncee. Cette fonction utilise les capacités de translitération de SPIP 1.6, ce qui devrait lui permettre d’être aussi utilisée pour toutes les langues.

-  une seconde fonction nommée arborescence génère récursivement l’arborescence virtuelle de la rubrique correspondant à l’identifiant passé en paramètre, en transformant tous les noms de rubriques via la fonction text2sys

-  enfin, les fonctions classiques de génération d’URL qui seront appelées par SPIP s’appuient sur arborescence pour générer les URL complètes

Prévoyons maintenant le traitement de ces URL

Dans la configuration de Apache (.htaccess ou httpd.conf) :

RewriteEngine On

# Pas de reecriture pour certaines ressources
RewriteRule \.(gif|jpg|png|css|php|php3) - [NC,L]
RewriteRule ^(ecrire|IMG|NAVPICS|oo)/ - [NC,L]

# Gerer les URLs SPIP
RewriteRule ^.*(article|rubrique|breve|auteur|mot|forum)(.*).html$ /$1.php3?id_$1=$2 [QSA,L]
RewriteRule ^(.*)site(.*).html$ $1site.php3?id_syndic=$2 [QSA,L]

# Gerer les URL inconnues
RewriteRule ^(.+/.*)$ guess.php3?url=$1 [QSA,L]

Tout d’abord, on indique de ne pas transformer les URL qui correspondent à des ressources accessibles directement, telles que les images, les feuilles de style ou tout simplement les scripts PHP.

De la même manière, on indique de ne pas transformer les URL correspondant à des éléments ne se trouvant pas à la racine du site.

Ensuite, on traite le cas général des URL qui contiennent un des termes suivants :

-  article
-  rubrique
-  breve
-  auteur
-  mot
-  forum

On remplace ainsi toute URL ...nimportequoi_rubrique14.html par /rubrique.php3?id_rubrique=14.

Vous noterez que l’identifiant d’un site syndiqué se notant id_syndic et non id_site, il faut traiter ce cas à part. Pour le traiter en même temps, l’alternative serait de renommer les fichiers site.php3 et site-dist.html en syndic.php3 et syndic-dist.html et d’en tenir compte dans la génération des URL.

Et ce guess.php3 alors ???

Comme nous l’avons vu, il est possible pour les rubriques d’utiliser des URL simplifiées telle que celle-ci :

http://www.phpheaven.net/projects/phpmychat/

Les éléments étant normalement identifiés par la présence en fin d’URL d’une partie telle que rubrique14.html, il fallait trouver un moyen de reconnaître à quelle rubrique l’URL ci-dessus fait référence.

L’idée à été de créer un script qui cherche parmi les cas possibles si l’un correspond à l’adresse demandée.

Voilà le script à télécharger :

Zip - 419 octets
guess.php3
Script de reconnaissance d’URL

Ce script qui est donc utilisé dans le cas où l’URL n’a pas pu être reconnue, parcours l’ensemble des rubriques de SPIP en tentant d’y reconnaître l’URL demandée.

En cas de succès, l’internaute est redirigé vers l’URL complète, et en cas d’echec il est redirigé vers la page d’accueil du site. Il serait possible bien entendu de générer plutôt une erreur 404 [5] pour indiquer la non disponibilité de la page demandée.

Aaaah, mes images ne s’affichent plus !

Pas de panique, ce sont seulement les URL relatives à l’intérieur des pages HTML qui ne sont plus valides.

Avec les URL classiques de SPIP, il n’y a pas de répertoire dans l’URL par rapport à la racine du site, donc il suffit de référencer les images, feuilles de styles, sources JavaScript, etc. en relatif, avec uniquement le nom du fichier s’il est dans cette même racine.

Quand le navigateur reçoit une page telle que http://www.phpheaven.net/projects/phpmychat/rubrique14.html, si le code HTML contient <img src="puce.gif" />, il va tout simplement demander au serveur le fichier http://www.phpheaven.net/projects/phpmychat/puce.gif, qui n’existe à priori pas.

Il faut donc utiliser des URL absolues (i-e complètes) pour faire référence aux éléments externes, par exemple ici <img src="/puce.gif" />, ou ajouter l’élément <base href="#URL_SITE_SPIP" /> dans l’en-tête HTML.

Ce problème n’est pas présent pour les documents et images contenus dans les articles, leurs URL étant générées par inc-urls-friendly.php3, mais il est présent pour les vignettes, pour lesquelles ce code n’est pas utilisé.

Notes

[1] Urls

[2] La réécriture des URL "à la volée"

[3] Voir à ce propos le point numéro 7 de ce message de neoram dans la liste spip-dev

[4] Voir sur phpHeaven : http://www.phpheaven.net/article88.html

[5] Voir le 404 Research Lab

Retour en haut de la page

64 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7

  • Répondre à ce message

    27 avril 2006 12:51, par didi

    Bonjour,

    Je suis débutante et j’érpouve quelques difficultés à comprendre les instructions. Vous écrivez :

    « J’ai ensuite fait référence à ce script dans inc-urls.php3 avec la ligne suivante :

    $type_urls = ’friendly’ ; »

    J’aurais aimé avoir plus de détails car je ne vois pas où mettre cette ligne de code dans le script...

    Et le fichier "guess.php3" on est obligé de l’utiliser aussi ou c’est optionnel ?

  • Répondre à ce message

    27 avril 2006 12:50, par didi

    Bonjour,

    Je suis débutante et j’érpouve quelques difficultés à comprendre les instructions. Vous écrivez :

    « J’ai ensuite fait référence à ce script dans inc-urls.php3 avec la ligne suivante :

    $type_urls = ’friendly’ ;

    J’aurais aimé avoir plus de détails car je ne vois pas où mettre cette ligne de code dans le script...

    Et le fichier "guess.php3" on est obligé de l’utiliser aussi ou c’est optionnel ?

  • Répondre à ce message

    25 janvier 2006 11:24, par Sylvain

    ça ne semble pas fonctionner avec SPIP 1.8.2 ; ou peut-être seulement quand le site est dans un sous répertoire ?

    -  ça génère bien les URL : URL/projects/phpmychat/rubrique14.html
    -  mais ne fait pas la correspondance (= page 404)

  • Répondre à ce message

    10 décembre 2005 16:41, par osilade

    excellent je n’avais pas fait attention a cette contribution précédament mais c’est tout a fait se que je recherche. Je voulais absolument pouvoir faire ressortir le nom de la rubrique dans l’url, propre2 ne permettant pas cela par defaut.

    Par contre j’ai lu en détail le texte et les commentaires mais cela reste encore pour moi bien nébuleux donc c’est probable que je vais devoir poser des question :-)

    merci pour la contrib

    Voir en ligne : maintenance informatique

  • Répondre à ce message

    27 juin 2005 15:13, par nudelfresser

    Ben c’est sans doute parce que c’est plus lisible à l’oeil nu, non ? Parce que des underscores, c’est vraiment casse-bonbons...

  • Répondre à ce message

    23 mars 2005 14:37

    il ne faut pas oublier de modifier, ou de créer le .htaccess sur le server.... voir plus haut.

  • Répondre à ce message

    14 mars 2005 20:11, par phil

    Personne n’a eu ce problème ? Pourtant je viens de tout recommencé, mais ca ne marche toujours pas, comment faire pour que les liens avec les nouveaux url soient actifs ?

    merci

  • Répondre à ce message

    9 mars 2005 13:07, par phil

    bon en fait, je n’avais pas vue : j’ai ajouté le fichier guess.php3, la réécriture se fait bien partout, mais par contre, le server ne trouve pas les pages :

    The requested URL /theatre/thomas_ostermeier_article33.html was not found on this server.

    comment faire pour résoudre se problème... ? merci.

  • Répondre à ce message

    9 mars 2005 12:54, par phil

    bonjour, j’ai un petit problème avec la réécriture... enfait, j’ai ajouté le fichier sur mon server, j’ai modifier la ligne dans inc-urls... mais ce qu’il se passe, la réécriture n’est pas effectué pour la plupart des pages, en fait, seules les pages contenant des images sont réécrite du type : www.monsite/rubrique2/article4.html

    mais par contre ces pages pour lesquelles la réécriture est faite ne s’affiche pas, il y a une erreur sur la page.

    quequ’un vois ou est le problème ?

    merci.

  • Répondre à ce message

    25 janvier 2005 16:35, par Nicolas Hoizey

    Google considère tout simplement que "je_suis_fou" représente un unique mot, alors que "je-suis-fou" en représente 3 ...

Pages 1 | 2 | 3 | 4 | 5 | 6 | 7

Répondre à cet article

Retour en haut de la page

Ça discute par ici

  • Le Couteau Suisse

    4 mai 2007 – 835 commentaires

    Ce plugin propose d’introduire facilement de simples fonctionnalités supplémentaires à SPIP et qui s’avèrent rapidement indispensables ! Par exemple : des filtres supplémentaires, des balises pratiques, des facilités typographiques, le contrôle de (...)

  • Squelette Median

    22 juin 2009 – 77 commentaires

    Un squelette généraliste, valide XHTML, et configurable. Sites de démonstration : en es fr

  • Social tags

    8 septembre 2008 – 121 commentaires

    Le plugin Social Tags permet d’ajouter des icônes de partage de liens vers les sites tels que Digg, Facebook, Delicious.... Une fois le plugin installé et activé (voir doc.), le choix des sites se fait via CFG. Insertion dans les pages Le plugin (...)

  • Squelettes SPIP Reset !

    5 février – commentaires

    Un squelette pour ne rien publier ! Il ne fait rien, mais il le fait à fond ! Objectif Voici un squelette dont le but est d’éviter que du contenu puisse percoler via les squelettes de la dist. En effet, lorsque l’on crée un site sous SPIP, il est (...)

  • Formulaire de participation à un événement

    23 janvier – 16 commentaires

    Cet article tente de rassembler des informations au sujet de l’affichage d’un formulaire de participation aux événements gérés par le plugin Agenda développé par Cédric Morin. La version 2 du plugin Agenda permet d’afficher dans l’espace public des (...)