Par défaut, les pages générées par SPIP utilisent des adresses
relatives ressemblant à article.php3?id_article=123,
donnant des URLs du type http://www.minirezo.net/article.php3?id_article=123.
Ce type de syntaxe, courant chez les sites « dynamiques », n’est
cependant pas très joli ni très évocateur. Il y a possibilité d’avoir
des adresses plus à votre goût - par exemple article123.html - ,
et SPIP vous aide en partie dans
cette tâche.
Cette fonctionnalité fait appel à la distinction entre deux types d’URLs :
l’URL apparente d’une page, c’est-à-dire telle qu’elle est tapée et/ou affichée
dans la barre d’adresse du navigateur. Par exemple
http://www.uzine.net/article765.html. Ce sont ces
URLs qu’on cherche à rendre plus « jolies » ou plus « signifiantes » ;
l’URL réelle de la page, c’est-à-dire l’URL qui est « vue » par SPIP lorsque
la page est calculée sur le serveur. Par exemple
http://www.uzine.net/article.php3?id_article=765 ;
en général, cette URL peut aussi être tapée directement dans le navigateur
(vous pouvez vérifier).
Choisir le type d’URLs apparentes
Le fichier inc-urls.php3 à la racine de SPIP, contient la déclaration d’une variable PHP contenant le type d’URLs à utiliser. Par défaut :
$type_urls = "standard";
Cette variable détermine le nom du fichier PHP qui est appelé pour gérer les URLs. Avec la déclaration par défaut ci-dessus, c’est inc-urls-standard.php3. Vous remarquerez qu’il y a aussi un fichier inc-urls-html.php3. Il permet de traiter des adresses du type de celles que nous avons prises comme exemple (« article123.html »). Vous pouvez donc décider d’utiliser plutôt ce fichier que le fichier « standard » en remplaçant la ligne sus-citée par la suivante :
$type_urls = "html";
Si vous voulez plutôt utiliser vos propres adresses (ce pour quoi vous devez savoir programmer en PHP), il est fortement conseillé de partir d’un des fichiers existants et de le recopier sous le nom que vous aurez choisi : inc-urls-XXX.php3.
Voyons maintenant les différents types de modifications à apporter.
Programmer la traduction des adresses apparentes en adresses réelles
Pour que l’adresse article123.html appelle bien en réalité
le fichier PHP article.php3 avec comme paramètre
id_article=123, il va falloir configurer le serveur Web qui
héberge votre site, soit dans un fichier .htaccess (ça ne
marche pas toujours), soit dans le fichier de configuration
centrale du serveur si vous y avez accès. Cela utilise,
sous le serveur Apache (le plus utilisé),
ce qu’on appelle
des Rewrite Rules : des règles de réécriture d’adresses Web.
Savoir écrire ces règles n’est pas simple pour les non-programmeurs, et nous ne pouvons pas vous donner de solutions infaillibles car cela dépend de votre configuration : cette partie est entièrement entre vos mains (ou celles de votre hébergeur).
Néanmoins et à titre d’exemple, voici les règles utilisées sur le site d’uZine :
(note si vous écrivez vos propres règles : utilisez toujours
l’option [QSA] car l’adresse peut présenter
des paramètres supplémentaires - comme lorsque
vous appuyez sur le bouton « recalcul », affiché
si vous placez le cookie d’administration ; l’option [L] signifie, quant à elle, que la réécriture s’arrête là si la règle est appliquée : Last)
Il est conseillé de tester la validité de ces adresses (en les essayant depuis votre navigateur) dès que vous avez mis en place la configuration correspondante, car sinon la suite ne servirait à rien.
Générer les URLs apparentes dans les pages SPIP
SPIP incorpore une fonctionnalité permettant de générer automatiquement les URLs du type que vous aurez choisi, à l’intérieur même des pages calculées par SPIP. Ainsi, les liens vers des articles seront par exemple générés sous la forme article123.html.
Les fichiers inc-urls-XXX.php3 sont là
à cet effet. Si vous avez décidé de créer le vôtre propre,
il va falloir programmer vous-mêmes la génération
des URLs. Sinon, c’est déjà fait.
Vous découvrirez qu’un certain nombre de fonctions PHP
sont définies, dans le fichier, sous le nom
generer_url_type d’objet (par exemple generer_url_article).
Le rôle de ces fonctions devrait vous être évident pour
peu que vous compreniez un minimum le PHP.
A vous de les modifier à votre guise. A titre d’exemple, vous pouvez
vous plonger dans le fichier inc-urls du Monde diplo.
Dans tous les cas, n’oubliez pas d’aller modifier le type choisi à l’intérieur de inc-urls.php3.
Enfin, dans vos squelettes, vérifiez que pour calculer les liens à l’intérieur des boucles, vous utilisez toujours les raccourcis #URL_ARTICLE, #URL_RUBRIQUE, #URL_BREVE, etc. Ce sont en effet eux qui déclenchent l’utilisation des fonctions évoquées ci-dessus, permettant la génération des « bonnes » URLs.

Vos commentaires
# Le 20 juillet 2001 à 04:46, par adb
Comment peut-on utiliser les urls personnalisées pour recréer une arborescence statique qui donne des urls signifiante, par répertoires, du type :
http://monsite.com/rubrique/index.html
http://monsite.com/rubrique/sous-ru...
http://monsite.com/rubrique/sous-ru...
Voire :
http://monsite.com/2001/07/article1...
http://monsite.com/dossiers/sujet/a...
http://monsite.com/2.22/
(façon Volume/Issue)
Par ailleurs, je ne sais pas si c’est le bon forum pour ça, mais tant que j’y suis :
Quelle serait la méthode pour utiliser SPIP pour un système de publication périodique par "volume.numéro" ?
J’vais pas être très original, mais : "merci".
# Le 20 juillet 2001 à 04:50, par adb
(précision, cf. mon précédent message)
Comment font-ils (cf. urls) sur le monde diplo ?
# Le 24 août 2001 à 16:24, par iscandar
voici un message pour utiliser les url html
Bonjour
Je viens d’essayer les rewrite rules proposées sur le site de
SPIP (http://www.uzine.net/article765.html) pour avoir de
jolie url. Aucun résultat.
En regardant les logs, je me suis apperçu que le moteur
rewrite essayer de matcher "article73.html" avec la
règle "^(.*)/article(.*).html$". Donc cela ne marchait
pas. Je suppose qu’il y a un réglage à faire quelque part.
Finalement, j’ai utilisé les règles suivantes, qui marchent
très bien chez moi :
RewriteEngine On
RewriteRule article(.*).html$ article.php3 ?id_article=$1 [QSA]
RewriteRule rubrique(.*).html$ rubrique.php3 ?id_rubrique=$1 [QSA]
RewriteRule breve(.*).html$ breve.php3 ?id_breve=$1 [QSA]
Quelqu’un a-t-il réussi à utiliser les rewrite rule proposées
dans la doc SPIP ?
Michaël Parienti
spip mailing list
spip@rezo.net
http://listes.rezo.net/mailman/list...