Des vrais noms de rubrique sans toucher à Apache ?

{{Une ruse de sioux}}. Enterrez la hache de guerre avec Google.

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

rubrique.php3 ?id_rubrique=46  : Nous sommes d’accord, ce n’est pas très parlant.
Ni pour vous, ni même pour les robots d’indexation habitués à classer les url avec des mots clefs.
Spip nous a proposé les « rewrite url »pour expliquer à Apache (le serveur web) comment le faire. Ici, je vous propose de le faire sans les Apaches.
Cheyenne de vie !

Finalement transformer rubrique.php3 ?id_rubrique=46 en /Rubrique1/ssRubrique1.1/ssRubrique1.1.1 n’est pas aussi difficile qu’il y paraît : Spip, le php et le html ont tout ce qu’il faut en magasin pour vous permettre de faire un joli rubricage compréhensible de tous et que vous pourrez retenir de mémoire !

L’intérêt du renommage des rubriques est double :

-  Permettre à tout un chacun de mémoriser l’adresse de la partie du site qui l’intéresse.
-  Permettre aux moteurs de recherche (Google et google-like) de mieux indexer votre site par une bonne lecture des url.

La façon la meilleure de réaliser cela, c’est les règles de rewrite url d’Apache. Evidemment, la lumineuse explication que nous en a fait le site de Spip n’est pas toujours limpide ni facile à mettre en oeuvre pour le quidam.

Voyons si nous ne pouvons pas faire plus simple :

Nous allons :
-  Renommer les rubriques avec leurs #TITRE ;
-  Créer l’arborescence et ses raccourcis ;
-  Corriger les problèmes de cohérence ;
-  Apprendre à refaire nos boucles SPIP.

Renommer les rubriques

C’est un préalable, une rubrique se définit par un mot et un seul qui la caractérise et dont l’assemblage avec ses ascendants est « logique ».

Exemple : /Maladie/Diagnostic/Biologie

Gardez une logique de nommage et tenez-vous y ! (Majuscule ou pas sur la première lettre, singulier ou pluriel etc. )

Vous pouvez utiliser des caractères accentués car j’ai fait pour vous un petit filtre spip pour enlever les accents secondairement.

Créez PHYSIQUEMENT votre arborescence

Allez zou, direction votre client FTP préféré. Vous créez les répertoires aux noms de #TITRE de vos rubriques mais sans accents. Dossiers, sous-dossiers avec dans chaque dossier un fichier index.php vide pour l’instant.

C’est fait ? Bien.
Alors tapez dans chacun des fichiers index.php la seule ligne suivante :

<?php include("http://www.votresite.com/rubrique.php3?id_rubrique=xx"); ?>

Evidemment "xx" c’est le numéro de rubrique que spip a attribué à chacune de vos rubriques et que vous allez oublier très vite après notre manip.

Et maintenant ? Corriger les problèmes...

Bon, c’est joli : /Rubrique1/Rubrique1.1/Rubrique1.2/ donne bien la page escomptée mais j’ai des problèmes de liens relatifs qui ne fonctionnent plus.

C’est vrai ? ben dommage :-)

Non, en fait c’est tout bête : rajoutez cette simple ligne dans votre squelette de rubrique dans le <head> :
<base href="#URL_SITE_SPIP">

Et voilà, toutes les images sont à nouveau bonnes :-)

Vous êtes trop forts les gars !

Hum, encore des problèmes ? Vraiment ?

Ah ben oui, on a rien sans rien.

Vos liens relatifs sans url ne marchent plus ? <a href="#top">Top</a> vous renvoie sur la page d’accueil du site ? Logique, c’est vous qui avez défini plus haut le base href :-)

Heureusement, petits veinards, php a pensé à vous ! $PHP_SELF n’est pas pour les chiens, elle appelle la page en cours de lecture soit rubrique.php3.

Comment ça ça ne vous aide pas ?
Mais si, il faut juste y ajouter l’#ID_RUBRIQUE. Ce qui nous donne donc <a href="<? $PHP_SELF.?id_rubrique=#ID_RUBRIQUE ?>#top">top</a>

Et voilà le travail !

Mais en spip ça nous donne quoi tout ça ?

Bon, c’est vrai #URL_RUBRIQUE n’est plus vraiment ce qu’il était... Tout se perd, plus rien n’est comme avant. A qui le dites vous ma bonne dame mais vous ne croyez tout de même pas qu’en vous passant d’Apache vous n’alliez pas y laisser des plumes ?

Dorénavant il va vous falloir remplacer #URL_RUBRIQUE par :

#URL_SITE_SPIP/[(#TITRE|enlever_accents)] pour les niveaux d’arborescence primaire

et pour les sous-rubriques par :

<a href="#URL_SITE_SPIP/
                        <BOUCLE_sshierarchie(HIERARCHIE){id_rubrique}>
                        [(#TITRE|enlever_accents)]/
                        </BOUCLE_sshierarchie>[(#TITRE|enlever_accents)/]

Voilà, ça marche :-)

« Ben oui mais c’est quoi la fonction enlever_accents, il l’a pas mon spip ce filtre » allez-vous me dire.

Oui, c’est vrai ça mais je vous en avais déjà parlé plus haut.

Bon ben... va falloir la rajouter dans mes_fonctions.php3 mes poulets :-)

Allez zou :

faites moi un copier/coller de ces lignes dans le fichier qui va bien (mes_fonctions.php3) :

/////////////////////////////////////////////////////////////////////////
////////////////Pour enlever les accents d'un mot
//////VersionPc:
////////"ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàáâãäåçèéêëìíîï©£òóôõöùúûü~ÿ"
/////VersionMac:
///////"¿¡¬?ƒ?«»... ÀÃÕŒœ""''÷Ÿ/€‹›‡·‚„‰ÂÁËÈÍÎÏÌÓÔ?ÚÛÙ?ˆ
/////Pour utiliser la version mac, deplacer le # la ligne au dessus
////////// Exemple : [(#TEXTE|enlever_accents)]
///////////////////////////////////////////////////////////////////////
function enlever_accents($texte){
if (!(is_string($texte)))
 
     return ("");
 
   $sortie = strtr($texte,
 "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ",
#"¿¡¬?ƒ?«»... ÀÃÕŒœ""''÷Ÿ/€‹›‡·‚„‰ÂÁËÈÍÎÏÌÓÔ?ÚÛÙ?ˆ
"AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
   return $sortie;
 }
 /////////////////////////////////////////////////////////

Quoi des questions ? Comment ça des questions ? Ben allez y : y a le forum pour ça !

Discussion

10 discussions

  • 2

    Ouhlàlà que c’est laid...

    Et comment tu fais quand on ajoute une rubrique ? Tu ajoutes un fichier à chaque fois ?
    Moi je propose que tu enlèves SPIP et que tu écrives plutôt tes pages en html...

    • validée en mars 2003 poulet :-) (proposée chsé plus combien de temps avant)
      Les Rewrite Rules n’étaient supportées que par peu d’hébergeurs mutualisés.

      Ceci dit je suis d’accord avec toi pour dire qu’on devrait mettre une date de péremption aux contribs :-)

    • bah le syteme me semblait intéressant mais oui j’ai vu qu’il y a une contribution qui propose un systeme d’url rewrite avec un systeme /repertoire/article se qui correspond a l’objectif.

      je me demande si il existe un cms qui en natif utilise un system de se type une rubrique = un repertoire ?

    Répondre à ce message

  • 3

    GENIAL !
    Je cherchais justement un truc comme ça !
    Franchement merci.

    • Ahlala, ces back quotes ;-)

    • Comme d’hab pour quasiment tous les tutos qui sont ici, on ne sait pas la version de SPIP utilisée.

    • Oulala...la version de spip ? 1.4 je pense...

      Mais franchement : cette bidouille n’a plus grand intérêt maintenant que quasiment tous les hébergeurs proposent l’url rewriting.

      La contrib a été approuvée en mars 2003, elle a donc été faite en 2002 et trois ans et demi en informatique ça fait un bail hein :-)

    Répondre à ce message

  • 1

    le code à mettre dans mes_fonctions est incrompréhensible.

    Quelqu’un peut me le transcrire pour que je puisse essayer cette fonction qui me semble intéresante.

    Merci à tous
    Pierre

    • Milles excuses

      erreur de lecture de ma part

      Sorry

    Répondre à ce message

  • Le code de mes_fonction_php3 n’est plus lisible dans l’article

    Est ce que quequ’un peut me l’envoyer.
    ou le remettre en état
    Merci
    @+

    Répondre à ce message

  • 1

    Marche po sur free.fr

    • free a désactivé il y a quelques mois toute une série de fonctions disponibles en standard sur php : c’est un choix unilatéral. Je pense que peu de scripts php non faits sur mesure fonctionneront sur free.
      Le mieux est de prendre un VRAI hébergeur, ils ne sont pas si cher...

    Répondre à ce message

  • 4

    Moi j’apporterai quelques modifications pour encore simplifier tout cela....

    Il suffit d’utiliser la fonction header() de PHP au lieu de la fonction include()

    Pourquoi ?

    Très simple : la fonction header() de PHP peut être utilisée pour effectuer une redirection sans modifier l’adresse entrée dans le navigateur :

    Exemple :

    http://www.monsite.com/rubrique1 ne se transforme pas en http://www.monsite.com/rubriques.php3?id=1 ce qui conserve la cohérence des raccourcis vis-à-vis du visiteur.

    Comment utiliser la fonction header() ?

    Voici la nouvelle ligne à entrer dans le fichier index.php à la place d’include :

    <?php
      header("location:/php/spip/rubrique.php3?id_rubrique={{xx}}");
    ?>

    (où xx est à remplacer par le numéro de la rubrique en question)

    Et alors me direz vous ?
    Plus aucune autre modification à effectuer, ça marche tout seul B-)

    C’est-y pas bien ça ? :-D


    gbws

    le ptit nouveau qui pense PHP :-p

    • Juste une petit précision :

      -  header(« location :/rubriques.php3 ?id...=xx ») est correct

      -  header(« location :http://www.monsite.com/rubriques.php3?id...=xx ») fonctionne mais l’adresse entrée par le visiteur (à savoir www.monsite.com/rubrique1) deviandra http://www.monsite.com/rubriques.php3?id...=xx dans son navigateur alors faite attention.

      Moila c’est tout :-)

    • JOLI !

      Merci, je vais tester ça.

      Bon, ben après c’est simplement la réécriture des url avec les boucles Rubriques et hiérarchies qui se pose.

      php rUl3z !

    • ah je l’avais bien dit qu’il y a vait plus simple :-)

    • Attention ! include se passe côté serveur, header côté client.

      Quest-ce que ça veut dire ? Le procédé décrit dans l’article marche à coup sûr, par contre il n’est pas garanti qu’avec header on obtienne le résultat souhaité à coup sûr. Avec header on exclue pas mal de moteurs de recherche de son site parce qu’ils ne suivent que les liens directs, pas les redirections HTTP. Les robots ne sont pas de vrais clients HTTP respectant tous les éléments du protocle HTTP. Voilà pourquoi.

    Répondre à ce message

  • Dan Hetzel

    Pour ceux que la réécriture d’URL intimide encore, voici deux articles en français qui peuvent aider à y voir plus clair :

    Le fichier .htaccess
    Des URLs pour plaire aux moteurs de recherche

    ... ma petite contribution à la communauté SPIP ;-)

    Répondre à ce message

  • Pour des rubriques, oui. Mais quand son site Spip est construit à la manière du tutorial sur les jeux vidéos. En quelque sorte, on a une rubrique pour chaque jeu (Dans mon cas 650 Rubriques) Comment faire pour avoir des url lisible dans ce cas ??
    Merci d’avance

    Répondre à ce message

  • 3

    Ça ne marche pas...! Il m’affiche une parse error dans la ligne du script index.php : <?php include(http://www.votresite.com/rubrique.php3?id_rubrique=xx); ?>

    D’où ça vient et comment faire ?

    Merci

    • La vie est cruelle parfois...

      Bon ben alors il faut que ça marche :

      alors prenons une syntaxe rigoureuse :

      <? 
      include ("http://www.tonsite.com/rubrique.php3?id_rubrique=xx"); 
      ?>

      Et là, plus de parse, de spartes ni de thraces. ;-)

    • Effectivement, c’était pourtant simple. J’avais pourtant essayé de modifier la syntaxe, sans succès.
      Merci de cette démonstration fulgurante et sans appel !
      Mon intelligence n’était pas arrivée à un tel niveau
       :))

      J’ai encore quelques pb d’images et de liens, mais rien de bien grave.
      Merci !

    • Moi même en faisant cela ça ne marche pas...

    Répondre à ce message

  • Un grand merci @ toi Philippe, je teste de toute urgence !!

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom

Dernière modification de cette page le 27 août 2009