SPIP-Contrib

SPIP-Contrib

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

290 Plugins, 198 contribs sur SPIP-Zone, 151 visiteurs en ce moment

Accueil > 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

2 votes

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 :

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 :

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

[1Urls

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

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

[5Voir le 404 Research Lab

Dernière modification de cette page le 24 septembre 2004

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 27 avril 2006 à 12:51, par didi En réponse à : Une arborescence virtuelle dans l’URL

    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

  • Le 27 avril 2006 à 12:50, par didi En réponse à : Une arborescence virtuelle dans l’URL

    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’ ;</ »quote>

    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

  • Le 25 janvier 2006 à 11:24, par Sylvain En réponse à : Une arborescence virtuelle dans l’URL

    ç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

  • Le 10 décembre 2005 à 16:41, par osilade En réponse à : Une arborescence virtuelle dans l’URL

    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

    Répondre à ce message

  • Le 25 août 2004 à 11:52, par ugo En réponse à : > Une arborescence virtuelle dans l’URL

    Comment fait on pour remplacer les underscore « _ » par des tirets « - » dans l’adresse modifié ? ça se passe ou ? par exemple à la place de http://www.frenchbreaks.org/html/gallery/international_events/

    je voudrais

    http://www.frenchbreaks.org/html/gallery/international-events/

    merci !

    • Le 8 novembre 2004 à 16:05, par Philippe Donnart En réponse à : > Une arborescence virtuelle dans l’URL

      Ligne 9 du inc-urls-friendly.php3
      $sys = ereg_replace(« [^.a-z0-9_=-]+ », «  », $sys) ;

      et ensuite
      $url = arborescence($row[’id_rubrique’]).text2sys($row[’titre’]).’_article’.$id_article.’.html’ ;

      et tout le reste (brève etc..)

    • Le 8 novembre 2004 à 21:20, par philippe En réponse à : > Une arborescence virtuelle dans l’URL

      Comme ceci plutôt
      $url = arborescence($row[’id_rubrique’]).text2sys($row[’titre’]).’-article’.$id_article.’.html’ ;

    • Le 25 janvier 2005 à 16:21, par Christophe Wiggers En réponse à : > Une arborescence virtuelle dans l’URL

      Précisons que la question a une raison : Google préfère les tirets - à l’underscore _ pour le référencement.
      Me demandez pas pourquoi, c’est comme ça...

    • Le 25 janvier 2005 à 16:35, par Nicolas Hoizey En réponse à : > Une arborescence virtuelle dans l’URL

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

    • Le 27 juin 2005 à 15:13, par nudelfresser En réponse à : > Une arborescence virtuelle dans l’URL

      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

  • Le 30 juin 2003 à 17:14, par Leeon En réponse à : > Une arborescence virtuelle dans l’URL

    Quelqu’un a t il utilisé cette contrib, une adresse visible...

    Merci

    • Le 30 juin 2003 à 18:11, par ? En réponse à : > Une arborescence virtuelle dans l’URL

      Comme indiqué dans l’article, c’est utilisé sur phpHeaven :

      http://www.phpheaven.net/

    • Le 19 juillet 2003 à 13:42, par pseudo bonnemine En réponse à : > Une arborescence virtuelle dans l’URL

      je pense avoir un problème similaire à celui de mes camarades d’infortune !
      un de mes articles (classé dans une sous-rubrique) voit son URL apparaître sous la forme « /lasousrubrique/larticle.html », alors que tous les articles étant directement classés dans une rubrique et non pas une sous-rubrique voient leur URL sapparaître sous la forme « /larticle.html ».

      se pourrait-il que cela provienne de la façon de traiter la boucle ?
      et dans ce pourrais-tu partager la tienne ?

      deuxième problème que peuvent rencontrer certains : si le titre d’un article contient un «  ? » le traitement ne fonctionne plus.
      En tout cas, c’est ce qu’il se produit sur mon site.
      Comment traiter le cas du point d’interrogation dans la fonction text2sys ?

      un grand MERCI :-)

    • Le 18 août 2003 à 17:19, par phil En réponse à : > Une arborescence virtuelle dans l’URL

      Merci pour ce script !! Mais le moteur de recherche SPIP ne fonctionne plus. Pourriez-vous m’indiquer quel code à rajouter pour qu’il soit de nouveau opérationnel avec ce programme.
      Merci à vous.

    • Le 9 mars 2005 à 12:54, par phil En réponse à : > > Une arborescence virtuelle dans l’URL

      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.

    • Le 9 mars 2005 à 13:07, par phil En réponse à : > > > Une arborescence virtuelle dans l’URL

      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.

    • Le 14 mars 2005 à 20:11, par phil En réponse à : > > > > Une arborescence virtuelle dans l’URL

      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

    • Le 23 mars 2005 à 14:37, par ? En réponse à : > > > > Une arborescence virtuelle dans l’URL

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

    Répondre à ce message

  • Le 9 février 2004 à 15:09, par Steph En réponse à : Et en local ?

    J’ai mis en pratique cette contrib et tout à marché comme sur des roulettes côté serveur. Seulement, comme je dois encore bidouiller pas mal de choses des mes squelettes (mon site étant déjà en ligne pour une question de référencement), je tiens encore à travailler en local. Et là, le fichier .htaccess ne fonctionne pas avec ma configuration du httpd.conf. Je suis sous XP avec easyphp 1.7.
    Que dois-je modifier dans httpd.conf ? Je n’ose pas trop triturer, vu la complexité de ce fichier...

    Merci pour cette super contrib et surtout pour les explication limpides de cet article ! J’ai pu le faire en 5 minutes.

    • Le 9 février 2004 à 18:59, par Steph En réponse à : J’ai trouvé !

      Le problème venait du fait que mon site en local était dans un sous-répertoire et non à la racine du /www/

      J’ai donc temporairement modifié les lignes suivantes du httpd.conf pour ne pas avoir à déplacer mon site (j’en ai d’autres là dedans !) :

      #
      # DocumentRoot : The directory out of which you will serve your
      # documents. By default, all requests are taken from this directory, but
      # symbolic links and aliases may be used to point to other locations.
      #
      DocumentRoot « H :/Program Files/EasyPHP1-7/www/monsite/ »

      AUSSI, il faut mettre la valeur AllowOverride sur All :


      Options FollowSymLinks Indexes
      AllowOverride All

      PUIS REDEMARRER APACHE !

      Et ça fonctionne comme sur le serveur, après avoir bien sûr modifier la configuration du site dans l’administration de SPIP pour qu’il prenne http://localhost et plus http://www.localhost/monsite

    • Le 15 novembre 2004 à 09:41, par emanuel En réponse à : Bravo !

      Et surtout merci, je n’y croyais plus :-)

      Cela fonctionne nickel.

    Répondre à ce message

  • Le 10 juillet 2004 à 23:31, par Philippe En réponse à : > Une arborescence virtuelle dans l’URL

    Petit souci avec les sous répertoires classiques.

    Les visites virtuelles de mon site ne sont plus accessibles.
    http://www.saint-remy-de-provence.com/le_guide/la_visite_virtuelle_du_lac_article236.html

    Le résultat
    Not Found
    The requested URL /home/saintrem/www/guess.php3 was not found on this server.
    Comment corriger ?
    Une idée ?

    • Le 11 juillet 2004 à 15:22, par ? En réponse à : > Une arborescence virtuelle dans l’URL

      Pour l’instant j’ai transféré les fichiers chez un autre hébergeur, et donner une autre adresse pour la pop-up.
      Mais il doit y avoir une autre solution.
      Philippe

    • Le 8 novembre 2004 à 15:56, par Philippe En réponse à : > Une arborescence virtuelle dans l’URL

      Il faut bien lire la doc, il faut juste modifier dans pas de reecriture pour certaines resources, |le sousrépertoire

    Répondre à ce message

  • Le 29 juillet 2004 à 11:33, par BoOz En réponse à : > Une arborescence virtuelle dans l’URL

    Ugo a écrit sans utiliser les balises <code>...

    voila ma solution, mon site etait dans un sous repertoire a savoir

    http://www.frenchbreaks.org/html et pas http://www.frenchbreaks.org

    donc mon .htaccess (mettre votre repertoir à la lpace du html/ ci dessous, noter le .swf pour que les flashs marchent)

    RewriteEngine On

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

    # Gerer les URLs SPIP

    RewriteRule ^.*(article|rubrique|breve|auteur|mot|forum|document)(.*)\.html$ /html/$1\.php3 ?id_$1=$2 [QSA,L] RewriteRule ^(.*)site(.*)\.html$ /html/$1site\.php ?id_syndic=$2 [QSA,L] RewriteRule ^(.*)petition(.*)\.html$ /html/$1petition\.php ?id_article=$2 [QSA,L]

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

    et mon head.html

    <link rel="stylesheet" title="light" type="text/css" href="http://www.frenchbreaks.org/html/bazoline.css" />
    vos balises META ------- <base href="http://www.frenchbreaks.org/html/" />

    et voilou ça a marché !
    French Breaks & Nubreaks

    • Le 29 juillet 2004 à 12:09, par ? En réponse à : > Une arborescence virtuelle dans l’URL

      je parlais d’un sous repertoire non spip !
      le masquage des noms des articles rend l’acces au .html un peu merdique
      d’ ou ma question ;)

    • Le 17 octobre 2004 à 22:35, par Philippe En réponse à : > Une arborescence virtuelle dans l’URL

      Idem pour moi, à ceci près que j’ai mis l’adresse complète dans le .htaccess plutôt que le sous répertoire, mais cela fonctionne.

    Répondre à ce message

  • Le 28 juillet 2004 à 11:28, par Renard En réponse à : > Une arborescence virtuelle dans l’URL

    une question un peu bete ;)

    la modification fonctionne parafaitement
    mais je possede un sous repertoire n’appartenant pas à spip
    et quand je tente d’acceder à celui si (ou du moins à la page index.html, le serveur me repond « bad request »

    une solution ?

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Fulltext

    14 mars 2009 – 218 commentaires

    Ce plugin permet d’une part d’exploiter le mode de recherche FULLTEXT de MySQL et d’améliorer ainsi énormément les recherches par rapport au fonctionnement natif de SPIP, et d’autre part d’indexer le contenu de certains (...)

  • Simple Calendrier v2

    25 février 2016 – 26 commentaires

    Il s’agit de la version pour SPIP 3 du plugin Simple Calendrier. Le plugin « simple calendrier » permet de gérer des évènements en ajoutant un nouvel objet éditorial dans l’administration de votre site SPIP. Il peut constituer une alternative au plugin (...)

  • ScolaSPIP 4

    19 janvier 2016 – 375 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • Mailsubscribers

    16 janvier 2013 – 432 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes de (...)

  • Flux RSS configurable

    8 avril 2011 – 68 commentaires

    Ce plugin vous permet de personnaliser le fonctionnement de votre flux RSS à l’aide d’un formulaire dans l’espace privé. Instalation Pour fonctionner, ce plugin nécessite que le plugin Itérateurs soit installé et activé sur votre site. Par (...)