At 19:30 +0100 13/12/01, Cypress wrote:
Bonjour à tous.
Je désire avoir des squelettes différents pour mes Rubriques et Articles.
Je sais la question as était posés des milliers de fois sur cette liste
:-)))))
Mais, il y a quelque chose que je ne capte pas bien :-(.
J'ai procédé à des régles de réecriture comme indiqué dans cette article.
"Utiliser ds URL's Perso" [uZine 3] Utiliser des URLs personnalisées.
J'ai crée un squelette rubrique2.html. Jusqu'là tout fonction :-)))
Le bug, c'est quand je recalcule mon fichier aprés avoir modifié le fichier
"inc-urls.php3". "Je change le type d'extension des fichiers en mode HTML."
Quand je clique sur le liens m'appelant la rubrique2. Je tombe sur mon
squelette rubrique2.html.
C'est à dire que la réecriture ne ce fait pas et ne va donc chercher l'ID de
la rubrique !!!!. J'optiens un fichier HTML classique :-((
Ouh là! Tu t'attaques à du pas fastoche, là...
Dans la doc que tu indiques, il y a deux parties, et tu as réalisé la plus facile (modifier le fichier de SPIP):
(1) La tâche principale, c'est la transformation, par le système serveur, de certaines adresses en d'autres adresse. Une des fonctionnalités du serveur Apache est de traduire des URLS en d'autres URL. Par exemple, tu peux lui dire que lorsqu'on lui demande l'adresse "mapage.html", en réalité il va chercher le document "sdfklgjmjqsdoiu-12756563-shkjdf.cqfd.php3?bid=4654887". De cette façon, le visiteur du site a besoin de connaître une URL simple, et le serveur saura que ça correspond à une autre adresse, beaucoup plus compliquée.
C'est le principe ici:
- tu veux que les visiteurs aient une adresse "simple", facile à mémoriser, telle que:
"article23.html"
- ce fichier n'existe pas sur ton serveur, mais tu indiques à Apache qu'en réalité, lorsqu'on lui demande le fichier "article23.html", il doit renvoyer la page:
"article.php3?id_article=23" (le fichier "article.php3" existe bien dans SPIP).
Cela se fait grâce à la fonction de Apache nommée "Rewrite Engine" (moteur de réécriture - comprendre réécrire les adresses).
(2) Ce que tu as fait...
Comme tu le sais, SPIP fabrique les liens internes à ton site automatiquement. Si tu indiques dans un squelette le tag #URL_ARTICLE, il sera remplacé par l'adresse de cet article. Par défaut, c'est donc "article.php3?id_article=23". De même si tu fais un lien hypertexte interne dans un article vers un autre article (comme [ceci->124]), l'URL de ce lien est fabriquée par SPIP.
Si tous les liens créés par SPIP sont du genre "article.php3?id_article=23", on n'a pas besoin que le serveur Apache "traduise" ces liens.
Mais ce qu'on veut, c'est justement que SPIP, au lieu de créer des liens "article.php3?id_article=23", fabrique des URL plus simples, du style "article23.html". C'est la manipulation que tu as réalisée, en modifiant "inc-urls.php3". Tous les liens créés par SPIP sont désormais de cette forme. Mais évidemment, le fichier "article23.html", il faut demander à Apache de traduire (mais le visiteur ne se rend compte de rien) cette adresse en "article.php3?id_article=23". C'est la fonction "Rewrite" qui intervient.
-----
Ton problème: tu as modifié la configuration de SPIP (via "inc-urls.php3"), qui fabrique désormais des fichiers "article23.html". Mais puisque tu n'as rien indiqué au serveur Apache, quand on lui demande cette adresse, il se contente de rechercher un fichier nommé "article23.html", et évidemment ne le trouve pas. D'où ERROR 404.
Tu dois donc activer le moteur Rewrite d'Apache, et lui dire comment transformer "article23.html".
------
ATTENTION!
(1) Tout d'abord ça n'est pas autorisé chez tous les hébergeurs. Donc il est possible que tu ne puisses pas le faire sur ton site (dans ce cas, il suffit de revenir à la version précédente de inc-urls.php3).
(2) C'est une fonctionnalité d'Apache très puissante, mais un peu dangereuse si on se trompe méchamment: le risque de lancer une "boucle infernale", qui sature la machine. Par exemple, tu demandes à Apache d'effectuer deux traductions:
- transformer "mapage.html" en "monsite.html";
- transformer "monsite.html" en "mapage.html".
Tu vois qu'à ce moment Apache passe de l'un à l'autre, en tournant sur lui-même.
(3) Il est donc conseillé de comprendre ce qu'on fait quand on bidouille ce moteur de réécriture. La documentation est là:
http://httpd.apache.org/docs/mod/mod_rewrite.html
La doc n'est pas très facile, mais le principe général est simple:
RewriteEngine On
active le moteur de réécriture
RewriteRule mapage\.html monsite.html
indique qu'il faut traduire "mapage.html" en "monsite.html"
La difficulté vient plutôt de l'utilisation intensive des expressions régulières dans ce moteur, et c'est un point pour lequel je n'ai jamais réussi à trouver une documentation bien foutue sur le réseau (j'ai dû acheter un bouquin sur le sujet!). Pour traduire "article23.html" en "article.php3?id_article=23", ça donne:
RewriteRule ^(.*)/article(.*).html$ $1/article.php3?id_article=$2 [QSA]
---------
De fait, la documentation fournie dans SPIP n'est pas évidente pour ceux qui ne maîtrisent pas les expressions régulières et le moteur de réécriture d'Apache. Je crois que c'est un peu voulu: il vaut mieux éviter de bidouiller sans savoir ce qu'on fait de ce côté-là...
Cela dit, c'est une fonctionnalité très puissante et très pratique. Ca ouvre des possibilités au webmestre vraiment épatantes.
Donc: si cet aspect t'intéresse, n'hésite pas à creuser le sujet, c'est très enrichissant. Les tout débuts sont assez complexes, parce qu'il faut se mettre aux expressions régulières, mais ensuite les progrès sont rapides et les possibilités d'utilisation immédiates. Si quelqu'un ici connait de bonnes documentations sur le sujet, peut-être qu'il peut envoyer les URL?
Amicalement,
ARNO*
--
Le Scarabée : http://www.scarabee.com
uZine 2 : http://www.uzine.net
DH/DSS, 0x11930F0B, DEEB 602D B344 644B AF88 BF73 85F4 2297 1193 0F0B