URL propres en arborescence virtuelle

Ceci est une archive périmée mais qui reste intéressante, parfois autant pour l’article que les commentaires associés.

Permet d’obtenir une URL synthétisant l’arborescence du site

Problématique

Une belle arborescence de rubriques devrait toujours être représentée par une belle url synthétisant cette arborescence. Et pourtant, même avec les urls propres, il était difficile d’obtenir plus qu’un titre et un identifiant peu parlants dans une barre d’adresse.

Avec un site décomposé de la forme suivante :

/ (Racine)
+ Télé-achat (Secteur)
| + Catégorie cuisine (Rubrique)
|   + Le plus beau presse-agrumes du monde (Article)

Il paraît logique d’avoir des adresses du type
-  http://monsite.exemple/
-  http://monsite.exemple/tele-achat/
-  http://monsite.exemple/tele-achat/categorie-informatique/
-  http://monsite.exemple/tele-achat/categorie-cuisine/le-plus-beau-presse-agrumes-du-monde.html

et bien c’est exactement ce qui vous est proposé ici !

Mais alors, Pierre, comment ça marche ?

C’est très simple Maryse ! Le système se base sur le même principe que les url_propres fournies dans la version officielle de Spip, sauf qu’au lieu de ne stocker que le titre dans le champ url_propre de la base de données, nous allons dorénavant stocker toute l’arborescence « propre ».

Il faudra aussi mettre en place une redirection d’adresse, puisque le répertoire tele-achat n’existe pas sur notre serveur web.

Allez, même pas peur, on va installer et paramétrer d’un coup !

Téléchargez et décompressez l’archive :

url-propres-arbo-v1.8.zip

C’est fait ? Alors c’est parti !

Le fichier propres-arbo.php est à placer dans le répertoire
{monDossierSpip}/ecrire/urls/.

Dans sa configuration par défaut, les urls ne sont pas limitées en longueur, et tous les caractères sont convertis en minuscules.
Si ces règles ne vous conviennent pas, vous pouvez changer la configuration du script via les constantes suivantes :
-  _taille_min_url_propre : la longueur minimale de la totalité de l’url (0 pour ne pas limiter). Si la taille de l’url calculée est plus petite, celle-ci sera remplacée par son type suivi de son identifiant (exemples : rubrique1, article42,...)
-  _taille_max_url_propre : la longueur maximale de la totalité de l’url (0 pour ne pas limiter)
-  _taille_max_champ_url_propre : la longueur maximale d’un niveau de l’url (0 pour ne pas limiter)
-  _mIxEdCaSe : booléen indiquant si les majuscules sont autorisées dans l’url (0 pour interdire, 1 pour autoriser)

Pour basculer sur ces url propres, la seule chose à faire est d’éditer votre fichier
mes_options.php
afin de positionner la variable
$type_urls = "propres-arbo";

Attention, le fichier mes_options.php n’est pas placé au même endroit selon les versions de Spip :
-  {monDossierSpip}/ecrire/mes_options.php pour SPIP 1.9.1
-  {monDossierSpip}/config/mes_options.php pour SPIP 1.9.2 et ultérieures

Du bon usage des redirections

C’est bien joli de patcher notre SPIP, mais il faut aussi que les requêtes passées au serveur web lui parviennent.

Pour cela, deux solutions :
-  le mod_rewrite d’Apache : la solution la plus propre lorsque le module est disponible sur votre serveur
-  l’utilisation des ErrorDocument : une solution moins élégante techniquement mais toute aussi efficace pour les serveurs les plus démunis (n’hésitez pas à envoyer vos dons pour les aider).

Redirection avec le mod_rewrite

Pas grand chose à faire, il suffit de prendre le fichier mod_rewrite/htaccess.txt et de le placer à la racine de votre site SPIP après l’avoir renommé en .htaccess [1].
Il vous faudra peut-être décommenter et modifier la directive RewriteBase de ce fichier si SPIP est installé dans un sous-répertoire sur le serveur web.
Par exemple, si SPIP est installé dans http://monsite.exemple/spip/ il faut définir RewriteBase /spip/.

Redirection avec la directive ErrorDocument

Ici, ça va vite aussi, il vous faut deux fichiers :

- ErrorDocument/spip-rewrite-with-404.php qu’il faut placer à la racine de votre site SPIP.
Il vous faudra dans tous les cas créer ou définir une page d’erreur 404. Vous en trouverez une dans ErrorDocument/404.html que je vous recommande de placer dans votre dossier de squelettes. Si toutefois vous la placiez ailleurs ou sous un autre nom, il vous faudra modifier la ligne $this->pagedestination="squelettes/nom/de/votre/page/404.html"

Il vous faudra peut-être aussi modifier la variable $this->installdir de ce fichier si SPIP est installé dans un sous-répertoire sur le serveur web.
Par exemple, si SPIP est installé dans http://monsite.exemple/spip/ il faut définir $this->installdir=",^/spip/,"; (la chaîne utilisée est un filtre pour expression rationnelle, il faut donc laisser les virgules l’encadrant ainsi que le ’^’ qui indique que l’on travaille uniquement depuis le début de la chaîne de caractères).

-  ErrorDocument/htaccess.txt qu’il faut aussi placer à la racine de votre site SPIP après l’avoir renommé en .htaccess [1].
Il vous faudra peut-être modifier la ligne ErrorDocument 404 /spip-rewrite-with-404.php de ce fichier si SPIP est installé dans un sous-répertoire sur le serveur web.
Par exemple, si SPIP est installé dans http://monsite.exemple/spip/ il faut adapter la ligne en ErrorDocument 404 /spip/spip-rewrite-with-404.php";

Modifications à apporter à vos squelettes

Ça n’est pas encore terminé ! Puisque l’on crée une arborescence virtuelle, le navigateur et le serveur web ne vont pas s’y retrouver lors des inclusions d’images, scripts, feuilles de styles, etc.

La solution est très simple : ajouter la balise <base href="#URL_SITE_SPIP/" /> dans l’en-tête de votre site.

Au secours, les boutons d’administration ne fonctionnent plus !

Mais non Maryse, inutile d’appeler Jack Bauer, il y a toujours une solution, par contre ça implique de mettre les mains dans le cambouis, et comme Jack est occupé avec les chinois du FBI, il va falloir se débrouiller !

Tout d’abord, recopiez la fonction suivante dans le fichier mes_fonctions.php se trouvant dans votre dossier de squelettes :

<?php

	function url_a_la_racine ( $url ) {
		if ( $url == '' )
			return '';
		
		$racine = $GLOBALS['meta']['adresse_site'];
		$suffixe = preg_replace(',^.*(ecrire/|spip.php)?([^/]*)$,U', "\\1\\2", $url);
		
		return "$racine/$suffixe";
	}

?>

Ensuite, recopiez simplement le fichier bonus/administation.html dans le dossier {monDossierSpip}/squelettes/formulaires/.
ATTENTION ! si vous utilisez une version antérieure à la 1.9.2, il vous faut renommer administration.html en formulaire_admin.html.

Allez, encore un effort, on y est presque, il reste la modification la moins propre selon moi (si quelqu’un a mieux, lachez vos comms !) :

Recherchez la chaîne

<link rel='stylesheet' href='".url_absolue(find_in_path('spip_admin.css'))

dans les fichiers
-  monDossierSpip/ecrire/public/admin.php
-  monDossierSpip/ecrire/public/debug.php
puis remplacez la par

<link rel='stylesheet' href='".find_in_path('spip_admin.css')

Problèmes connus

RealET a dit :

« Une implémentation foireuse commune à Internet Explorer 6 et FireFox 1.5 fait que sur ces navigateur, le base href est pris en compte pour toutes les ancres de la page, ce qui a pour effet de faire planter toutes les ancres et notes de bas de page. »

Je n’ai malheureusement pas de solution à proposer à ce sujet, si quelqu’un connaît un hack, qu’il parle maintenant ou se taise à jamais...


Jean-Kevin, pirate-kiddie des temps modernes a dit :

« C’est nul cette modification : je viens de changer un nom d’article ou de rubrique, mais l’url ne change pas ! »

Mais non Jean-Kevin, c’est normal ! SPIP est partisan du moindre effort, et ce pour le bien de nos serveurs web. Ainsi il ne recalcule pas les urls propres tout seul. Mais n’aie pas peur, il existe un splendide plugin pour lui dire de le faire.


Une autre question ?

Notes

[1sous Windows et MacOS, on ne peut pas renommer un fichier en .htaccess. Il faut donc utiliser votre client ftp préféré pour envoyer le fichier, et utiliser le même client pour renommer ensuite le fichier sur le serveur.

Discussion

36 discussions

  • totomania

    Bonjour,

    j’ai le même problème que momo, le pluggin ne marche plus lors de la migration de spip vers la version 2.0, je ne peux pas changer mes liens par ceux proposer par la nouvelle version de spip car je vais me retrouver avec trop de lien 404, j’ai presque 2000 articles sur mon site.

    Quelqu’un a des suggestions ou une solution.

    Merci pour votre aide.

    Répondre à ce message

  • 1

    Bonjour, j’ai un problème avec cette extension. Après une mise a jour vers spip 2.0.3 impossible de l’utiliser, spip m’affiche « propres-arbo pas autorise ».

    Quelqu’un a t’il le même problème ?

    Merci

    • Bonjour, j’ai un problème avec cette extension. Je suis sous spip 2.0.3, et impossible de l’utiliser, spip m’affiche « propres-arbo pas autorise ».

      Quelqu’un a t’il trouver une solution ?

      Merci

    Répondre à ce message

  • Bonjour,

    J’ai le problème que décrivait Seb dans certains précédents posts, mais la modif de strrpos vers stripos n’y change rien, le résultat est le même dans la page debug ( ?var_mode=debug ) pour l’#ENVURL, il manque l’arborescence depuis la racine du site jusqu’à la page. C’est comme si la ligne « $url = substr($url, stripos($url, ’/’) + 1) ; » dans propres-arbo.php n’avait pas d’influences.

    Quelqu’un-t-il la solution ?

    Répondre à ce message

  • Bonjour,

    Après l’installation des url propres en arbo et sa configuration, je me retrouve avec des erreurs sur les formulaires du plugin form&table.
    Les scripts ne sont pas retrouvés (cherchés depuis le repertoire courant /rubrique/), envoi des données ne fonctionne plus.

    Merci de m’informer des modifications à faire si vous avez été confronté au pb.

    SPIP 1.9.2g

    Florent

    Répondre à ce message

  • Je conseille à tous de passer en Spip 2.0 et d’oublier cette contrib au profit de la nouvelle gestion native des url de type arbo apportée par la nouvelle version de notre CMS écureuil préféré. Cette dernière ne poste aucun problème (notamment pour les boutons d’admin), elle est beaucoup plus souple (car personnalisable via quelques variables) et simple à mettre en place (case à cocher via l’espace privé). Par contre, pour tous ceux qui souhaitent rester en 1.9, sachez que cette contrib - une fois le strrpos() ; corrigé - est vraiment très pratique, encore merci à son auteur !

    Répondre à ce message

  • 1

    Je suis sous Spip 1.9.2d et j’ai suivi le tuto concernant les boutons d’admin, rien n’y fait ils n’apparaissent pas sur le site public (alors que je suis identifié en admin) avec les nouvelles URL. Quelqu’un a-t’il réussi ? Merci par avance de m’expliquer comment régler le problème, ce n’est pas du tout ergonomique de vider le cache total du site à chaque modification sur les squelettes pour ensuite tout recalculer manuellement ... Petite précision : ils apparaissent lorsque je visite le site avec les anciennes URL type « spip.php ?page= ».

    • ... Problème toujours pas réglé, je réitère ma question ... Merci d’avance

    Répondre à ce message

  • 2

    Bonjour,
    tout d’abord merci à tous ceux qui prennent du temps pour développer des contrib et aider les utilisateurs de SPIP.

    J’ai un probleme assez étrange, j’utilise la méthode « Redirection avec le mod_rewrite », mais je n’arrive pas a obtenir une url du type :
    « http://monsite.exemple/tele-achat/categorie-cuisine/le-plus-beau-presse-agrumes-du-monde.html »

    En fait toutes mes urls sont du type « http://monsite.exemple/rubrique/ » ou « http://monsite.exemple/article.hmtl » ... l’arborescence n’est pas représentée :-(

    J’espere avoir été clair,
    d’ou peut bien venir ce probleme ?

    • Bonjour,
      Cette contrib est apparemment super mais je n’arrive pas à la faire fonctionner.

      Sur le lien d’un article du type monsite.com/article.html, ç’est ok.
      Cet article fait partie d’une rubrique donc quand je clique sur le lien de la rubrique, j’ai monsite.com/rubrique/, très bien. Sont listés alors les articles de la rubrique et là, le lien de l’article est monsite.com/rubrique/article.html et là, ça na va plus, j’ai la page d’erreur 404.

      En résumé :
      monsite.com/article.html : ok

      monsite.com/rubrique/ : ok

      monsite.com/rubrique/article.html : erreur 404 alors que c’est ce que je souhaite avoir au final.

      Comment faire ?

      Merci pour votre aide

      Domusse

    • Je pense qu’il faut que tu regardes mes trois posts précédents ainsi que sur mon Blog perso (le lien est sur le deuxième post).

    Répondre à ce message

  • 6

    Bonjour, j’ai installé cette contrib et en gros ma page secteur fonctionne seulement chaque page rubrique (et sous-rubrique) ainsi que les pages d’article renvoient des erreurs 404. Pouvez-vous m’aider ? Si possible rapidement par MSN ? Je vous ferai parvenir mon adresse. Merci d’avance

    • Je pense avoir résolu mon problème, pour ceux que ça intéresse :

      Dans le fichier propres-arbo.php puis dans la fonction recuperer_parametres_url() ; à la ligne 341 (par là) il y a écrit « $url = substr($url, strrpos($url, ’/’) + 1) ; » mais la fonction strrpos() ; a pour effet de récupérer la position de la dernière occurence du caractère spécifié (ici le slash).

      Du coup, en testant, les url propres stockées dans la BDD étaient de la forme « rubrique/sous-rubrique/titre-article » or la fonction strrpos() ; faisait récupérer uniquement « titre-article » et donc quand on compare les deux chaines elles ne sont pas égales donc hop erreur 404 !

      J’ai résolu le problème en modifiant la ligne en question par « $url = substr($url, stripos($url, ’/’) + 1) ; » donc en utilisant stripos() ; à la place de strrpos() ; qui a pour effet de donner la position de la PREMIERE occurence du slash.

      Voilà, tout semble ainsi fonctionner. S’agissait-il d’une erreur de votre part ou était-ce voulu pour une raison qui m’a échappé ? Merci.

    • Salut,

      Merci pour ta proposition, j’ai testé mais j’ai l’impression que la pagination dans les article ne prend pas en compte les modifications... Il s’agit bien de propres-arbo.php qui se trouve dans ecrire/urls/ ?car j’ai j’ai la modif mais aucun effet ..

      merci d’avance

      Jo

    • Oups stripos est valable juste en php5 ... Y’aurai -t-il une altérnative ?

    • J’ai résolu le probleme de STRIPOS mais bizarre .. dans les pages articles ca ne fonctionne toujours pas...

    • Personnellement, je n’ai pas de pagination dans mes pages d’articles, juste dans les pages de rubriques et ça marche très bien. Par contre j’ai « article suivant | article précédent » et pour éviter tout problème je passe mes liens en URL absolue dans mes boucles (je n’aime pas la balise <base />) dans le style # URL_SITE_SPIP/mon-repertoire/mon-sous-repertoire/# URL_ARTICLE mais bien sûr ceci est un exemple exagéré volontairement. Si tu es comme moi chez OVH, il est très simple de passer en PHP5 via un fichier .htaccess (cf la doc de OVH).

      Petite démo pour ceux qui veulent vérifier que tout fonctionne bien chez-moi : c’est par ici !

    • Dernière chose : installe (si ce n’est pas déjà fait) et utilise le plugin effacer url propres, puis vide le cache plusieurs fois pour être bien sûr, ensuite je ne sais pas trop comment c’est calculé mais il faut visiblement un certain temps avant que les nouvelles URL soient effectives après avoir vidé le cache.

    Répondre à ce message

  • Bonjour

    Je viens de faire toute la manip, tout est OK.. mais la pagination ne fonctionne que dans les pages « rubrique », quand je clique sur un article et que je veuille laginer les autres articles, ca ne marche pas... avez vous déjà eu ce genre de probleme ?

    Répondre à ce message

  • Bonjour,

    En local (WAMP) tout fonctionne très bien avec .htaccess.
    Mais chez mon hébergeur (OVH), en utilisant le .htaccess, la redirection ne marche pas pour les articles et les rubrique (ça marche tout de même dans les autres cas !). J’ai décommenté RewriteBase / comme c’est expliqué ici : http://guide.ovh.com/HtaccessModRewrite.

    J’ai contourné le problème en utilisant le fichier php qui gère l’erreur 404, mais apparemment dans ce cas les entêtes HTML (POST) sont perdus !

    Quelqu’un a déjà eu le même problème ? Une solution pour faire fonctionner correctement .htaccess chez OVH ou de de préserver les entêtes POST avec la redirection 404 ?

    Merci d’avance.

    Répondre à ce message

  • 1

    Bonjour !

    Depuis que j’ai installé ce plugin, j’ai eu quelques problèmes liés à certains liens dans mon site (exemple : le bouton « lancer la recherche », le bouton « submit » de certains formulaires").

    J’ai résolu certains de ces problèmes en réécrivant à la main l’url voulue (le bouton recherche fonctionne maintenant), mais le problème persiste en ce qui concerne mes formulaires.

    Je ne suis malheureusement pas assez douée pour trouver moi même ce qu’il faut faire, et je suis bien embetée car du coup mon site n’est pas viable...

    Est-ce que quelqu’un saurait m’aider ? (Middir m’a déjà aidé à régler certains problèmes mais il n’a pas trop de temps en ce moment).

    Merci d’avance !

    • J’ai exactement le même problème !
      quelqu’un à une solution svp ?!

    Répondre à ce message

  • 9

    Bonjour et merci pour cet outil !
    Une question cependant, est-il compatible avec le système de pagination de SPIP et dans quelle mesure. merci pour vos réponses.
    Ari

    • Bonjour,

      effectivement j’ai remarqué que cette contrib n’est pas compatible avec les liens générés par la pagination dans le cas des rubriques uniquement (Elle est pleinement fonctionnelle pour les mots clés par exemple). Ceci est dû au fait qu’on soit obligé d’utiliser <base href="#URL_SITE_SPIP/" /> et que les liens de la pagination soient de la forme <a href="./...">, du coup ils repartent de la racine du site ce qui les rend incompatible avec l’arborescence des rubriques.

      Pour ma part, j’ai trouvé un contournement possible en ajoutant 2 fonctions et en modifiant l’appel à la pagination (Pour la page des rubriques cela doit suffire). Ceci n’est surement pas très propre mais cela fonctionne dans mon cas.

      Voici les fonctions à ajouter à mes_fonctions.php :

      // Supprime tous les arguments d'une url
         function purger_url($url) {
            return preg_replace(',[?&#].*$,U', '', $url);
         }
      
      // Remplace toutes les urls du type ./... par URLCouranteComplète/...
         function forcer_url_courante ($texte) {
            if ($texte == '')
               return '';
      
            return preg_replace(",(.*href=')\./(\?.*),U",
                                "$1" . purger_url(self(true)) . "$2",
                                $texte);
         }

      Il suffit ensuite de filtrer l’appel à la pagination dans le(s) fichier(s) html concerné(s) (rubrique.html devrait suffire comme expliqué au début) comme ceci :
      [(#PAGINATION|forcer_url_courante)]

      Il doit être possible d’utiliser une autre voie en modifiant les modèles de la pagination mais l’étendue des modifications à effectuer me semble beaucoup plus importante.

      Comme toujours si une solution plus simple/propre existe, je suis à l’écoute.

    • Bonjour et merci pour cette solution !

      Elle fonctionne partout sauf pour la page de départ qui renvoie vers une url sans l’arborescence. Sur l’exemple 0|10|20|30, ca fonctionne sur les pages 10|20|30 mairs lorsque on clique sur « 0 », ca nous renvoie vers la racine du site.

      Cela le fait-il chez vous ? Une solution ?
      merci pour votre contribution !
      Ari

    • Chez moi ça fonctionne bien.

      Avez-vous bien vidé le cache de SPIP une fois les modifications faite ? Si oui je ne vois malheureusement pas d’où peut venir le pb.

    • Hello, j’ai le même souci, tous les liens de pagination marchent, sauf le 1er, par contre j’utilise la pagination de cette manière :

      (#PAGINATIONpage_precedent_suivant

      Où page_precedent_suivant modifie l’affichage, cf. http://www.spip.net/fr_article3367.html

      (Désolé, il manque les accolades avant et après page_precedent_suivant)

    • Nicolas

      Ah moi j’ai ça aussi.
      si qq’un a déjà trouvé la soluce ?

    • Hello,

      désolé de ne pas avoir répondu plus vite, je n’étais pas là ce mois-ci (Vive les vacances \o/).

      Je viens de vérifier et je vous ai menti (Pas taper /o\) car chez moi ça ne fonctionne pas non plus sur le premier élément.

      Après recherche il s’avère que j’ai oublié un ?dans la fonction forcer_url_courante qui devient donc au final :

      // Remplace toutes les urls du type ./... par URLCouranteComplète/...
         function forcer_url_courante ($texte) {
            if ($texte == '')
               return '';
      
            return preg_replace(",(.*href=')\./(\?.*)?,U",
                                "$1" . purger_url(self(true)) . "$2",
                                $texte);
         }

      Cette fois j’ai vérifié sur 2 sites et ça fonctionne bien. Encore désolé de l’erreur.

    • merci c’est cool !
      et par hasard, t’aurais pas la soluce pour le problème avec forms et tables ???
      Bien à toi
      Ari

    • Ah non désolé, je ne connais pas ce plugin (Est-ce que la solution n’est pas d’utiliser la même fonction que pour la pagination ?).

    • Bonjour,

      Je viens de faire toute la manip mais spip retourne une erreur : Erreur : filtre « forcer_url_courante » non défini, _article_principal.

      Que dois-je faire dans ce cas ?

      Merci

    Répondre à ce message

  • 1

    Le boutton répondre à cette article ne marche pas après l’installation de ce plugin

    le chemin est : http://www.ste.com/rubrique/spip.php?page=forum&id_article=23

    • Salut,

      il suffit de rajouter cette règle d’url rewriting au fichier .htaccess qui se trouve à la racine de spip :

      « # PATCH pour les urls
      RewriteRule ^(.*)/spip.php$ spip.php [QSA,L] »

      En effet, cela permet au serveur de lier directement la page /rubrique/spip.php à /spip.php, tout en gardant les variable GET passé en parametre.

      ++
      Zzarbi

      Ps : C’est un "patch" assez bourrin, pour l’instant je n’ai pas vu de bug...

    Répondre à ce message

  • La mise en place dans le fichier inc-head de la ligne <base href="#URL_SITE_SPIP/" /> provoque un problème avec les notes de bas de page qui ne fonctionnent plus.
    Il suffit de supprimer la ligne pour que tout remarche.

    Mais pourquoi ?

    Répondre à ce message

  • 10

    Bonjour
    J’ai bien testé ce contrib, et ca marche bien, toutefois, j’ai constaté que si l’url de la page est incorrecte et de type
    www.site.com/sdfdsf.html ou www.site.com/jhkj il renvoit pas sur la page 404, mais sur une page vide ...

    et si l’url est de type www.site.com/sdfdsf.php, à ce moment la il donne erreur404

     ?

    • Boris Lechner

      Bonjour,

      je présume que vous utilisez la méthode de redirection par l’ErrorDocument ? Dans le cas contraire, la réponse que voilà ne serait pas la bonne.

      Je vous invite à relire le paragraphe « Redirection avec la directive ErrorDocument » et à vérifier que le fichier 404.html soit bien placé dans votre dossier de squelettes, et que son chemin soit bien réglé dans le fichier spip-rewrite-with-404.php.

      Les erreurs d’accès sont bien gérées d’après tous les tests que j’ai pu faire avec les deux méthodes de redirections.

    • Bonjour
      le fichier 404 se trouve bien dans le dossier de squelettes, et j’ai pas fait d’erreur, mais malgré ça, ca marche pas toujours
      c’est vrai j’utilise la rediction par l’errordocument ...

      J’ai consulté d’autres sites qui ont utilisé ce contrib, et même problème.

      Avez vous un site exemple qui utilise cette méthode pour voir ?

      MErci

    • Boris Lechner

      mmm
      J’ai un site chez free qui utilise cette méthode sur lequel j’ai retesté après votre message, et tout fonctionne avec.

      Pouvez-vous m’indiquer ce que vous avez mis à coté de la variable $this->pagedestination dans spip-rewrite-with-404.php ?

    • je l’ai pas changé :
      $this->pagedestination=« squelettes/404.html » ;

      et dans mon dossier de squelette j’ai bien la page 404.html

      la question, c’est pourquoi il marche bien quand on a .php et ca marche pas avec les autres ...

      Merci

    • Boris Lechner

      la question, c’est pourquoi il marche bien quand on a .php et ca marche pas avec les autres ...

      Je ne pense pas que ce soit la question. Vérifions :
      Essayez avec n’importe quelle autre extension, même une fausse : http://leNomDeDomaineDuSite.fr/meuh.coin par exemple. Selon moi, ça marchera comme avec .php

      Si c’est le cas, vérifiez que votre serveur web ait bien les autorisations sur le fichier 404.html.

      Sinon, votre spip est il à la racine de votre site ? (http://leNomDeDomaineDuSite.fr/)

    • oui avec n’importe autres extentions, ca marche comme php
      mon site est à la racine oui
      l’autorisation sur le fichier 404, j’ai tout met en 777 pour tester, mais ca donne toujours la même chose ...

    • Boris Lechner

      Là, pour moi c’est un problème dans la manière dont votre Spip gère les pages inconnues.

      J’explique : le script spip-rewrite-with-404.php analyse l’URL qui a été appelée : si elle finit par « .html » ou si le dernier élément de l’arborescence ne contient pas le caractère point « . », le script renvoie l’adresse à spip, qui transmet ensuite le dossier au script propres-arbo.php, celui-ci a la charge de retrouver l’élément demandé s’il existe. En fonction de cela Spip gère ; soit il affiche l’élément, soit il affiche sa propre page 404.

      Quel version de Spip utilisez-vous ? Utilisez-vous des plugins ou des réglages spécifiques ?

    • la dérnière version, pas de régles spécifiques ...
      Pouvez vous me donner un lien vers un site qui marche bien ou votre msn, je peux vous passer les passes ftp d’un site de teste, et vous allez voir ca vous même.

    • autres problèmes avec ceux qui utilisent directive ErrorDocument :
      vous aurez des problèmes pour créer le sitemap, car ca marche pas
      avec xenu, il detecte des erreur 404 sur toutes les pages de votre site ....

    • Boris Lechner

      la dérnière version, pas de régles spécifiques ... Pouvez vous me donner un lien vers un site qui marche bien ou votre msn, je peux vous passer les passes ftp d’un site de teste, et vous allez voir ca vous même.

      Un site qui marche (en suivant la procédure décrite ci-dessus) : http://boris.lechner.free.fr

      Pour le reste, laissez-moi un identifiant de messagerie instantanée, et je me créerai un compte.

    Répondre à ce message

  • Excellent article.

    Bravo cher Boris.

    Répondre à ce message

  • 1

    ca marche bien avec Redirection avec la directive ErrorDocument
    toutefois y’a quelques remarques, a savoir :
    Sur les pages ’articles" l’url de plan de site en bas de ma page devient www.site.com/rubrique/ssrubrique/spip.php?page=plan et erreur 404 quand je click

    et normalement il faut que ca soit www.site.com/plan-site.html

    et même chose pour le flux RSS, et même pour le boutton Recalculer cette page ...

    Merci de votre réponse
    j’attend ;)

    • Boris Lechner

      Bonjour,

      alors pour le bouton « recalculer cette page », je vous invite à vérifier les étapes détaillées dans le paragraphe « Au secours, les boutons d’administration ne fonctionnent plus ! ».

      Concernant le plan et le backend, c’est vrai que j’ai oublié de fournir deux redirections (trois, en fait, il y a aussi le moteur de recherche).
      Il faudra que je pense à les mettre dans une prochaine version (pour les historiens : aujourd’hui, nous en sommes à la version 1.8).

      Vous qui êtes en ErrorDocument, vous devez éditer le fichier spip-rewrite-with-404.php.
      Il va falloir rajouter les règles de redirection suivantes AVANT les autres règles. Mais attention aux tâches, on met les mains dans le cambouis.

      		# En bonus, la fonction recherche
      		$this->regles[] = Array( 'filtre'       => ',^recherche.html$,',
      					'remplacement' => 'spip.php?page=recherche' );
      
      		# Le plan du site
      		$this->regles[] = Array( 'filtre'       => ',^plan-site.html$,',
      					'remplacement' => 'spip.php?page=plan' );
      
      		# Le flux rss
      		$this->regles[] = Array( 'filtre'       => ',^backend.rss$,',
      					'remplacement' => 'spip.php?page=backend' );

      pour les utilisateurs du modRewrite, même principe, il s’agit d’insérer ces lignes dans le fichier .htaccess, juste avant la partie commentée ’# URLs « propres-arbo »’.

      # Page de recherche en url "propre" maison
      RewriteRule ^recherche.html$    spip.php?page=recherche [QSA,L]
      
      # Page du plan du site en url "propre" maison
      RewriteRule ^plan-site.html$    spip.php?page=plan [QSA,L]
      
      # Page du backend du site en url "propre" maison
      RewriteRule ^backend.rss$    spip.php?page=backend [QSA,L]

      Dans les deux cas, j’avoue ne pas avoir eu le temps de tester cette réponse, mais je pense à 99% que cela devrait fonctionner. Merci de confirmer ou d’infirmer en précisant quelle méthode de redirection vous utilisez !

    Répondre à ce message

  • 2

    Bonjour,

    Je viens de suivre toute la démarche d’installation de fichiers, mais je me retrouve avec un site tout cassé...

    Premièrement, je me retrouve avec des « url not found ».
    Ensuite, j’ai une erreur 302 lorsque je veux me connecter (j’utilise le plugin accès restreint qui affiche un formulaire de connexion au site).

    Au secours !

    • J’ai bien modifié le htacess, mais ca ne fonctionne toujours pas... Et maintenant sur ma page d’accueil ( la seule qui arrive à s’afficher), je n’ai meme plus de css.

      Snif

    • Problème réglé, grâce à Middir. Merci beaucoup car sans ton aide mon site serait toujours bloqué à l’heure qu’il est.

      Comme je le dis dans le post un peu plus bas, je n’ai pas eu les détails de ce qu’il a modifié dans mes fichiers ; mais il faudra qu’il nous donne sa recette car elle fonctionne bien !

    Répondre à ce message

  • 17

    Bonjour,

    Hebergeur : 1&1
    SPIP : 1.9.2
    Squelette Alternatives : 1.9.2

    Je ne vois pas où ajouter la balise <base ...> dans le header avec le squelette alternatives . j’ai donc des erreurs 404 sur toutes mes pages.

    Merci d’avance pour l’aide apportée.

    • moi aussi j’ai ce problème, des erreurs 404 sur toutes les pages
      je comprend pas pourquoi ca marche pas pour moi et pour les autres oui

      Qui ce que j’ai oublié

    • ta balise tu dois l’ajouter entre

      et

      Pour moi ce plugin marche a merveille sauf mon fil rss qui est cassé si quelqu’un a une solution je suis preneur.

      bon courage a tous , je reviendrais vois si je peux plus vous aider :)

      @+

    • Middir : Tu dis : ’ta balise tu dois l’ajouter entre et’
      Euh j’ai pas tout saisi.

    • Middir, esssayer de voir avec moi est ce que j’ai bien fait les étapes ou pas :

      Pour commencé, j’ai telecharger l’archive
      puis j’ai placé le fichier propres-arbo.php dans le répertoire ecrire/urls
      par la suite j’ai modifié mes_options.php et j’ai met $type_urls = « propres-arbo » ; et je l’ai placé dans le dossier config aussi sur ecrire

      enfin renommer mod_rewrite/htaccess.txt en .htaccess et le mettre à la racine du site.

      Pour le fichier mes_fontions.php j’ai pas bien compris où je dois le mettre puisque je l’ai pas dans le repertoire /squelettes que j’ai fait aussi dans le repertoire dist.

      Normalement avec ça, il faut que ca marche, mais c’est pas le cas.

      Avez vous une solution ?

    • Salut,

      Désolé mon code n’apparait pas dans ma réponse.

      assure toi que tu as bien mis < head> et < /head >

      As tu un liens que je puisse voir ce que ca donne pour pouvoir t’aider ?

      je reste a ta disposition :)

      ++

    • bonjour,

      Merci Middir.
      J’avais bien compris que la balise devait se mettre entre les head. Mais je ne vois pas qu’elle est le fichier concerné.

      Laetitia.

    • En fait il me manque un / a la fin de la rubrique.

      si je clique sur une rubrique, le navigateur me donne page 404 : http://site/rubrique/
      alors que http://site/rubrique fonctionne.

      Par contre pour les articles, je n’ai pas trouvé de lien valide.

      Merci

    • Laititia,

      Peux tu me donner une URL que je puisse voir ou tu bloques ?

      @+

    • bon,

      je viens de voir que tu es hoster chez oneandone :)

      aussi peux tu sortir le base href de ton et le mettre en dur ds le

      de ta page... j’avais eu des soucis avec les inclure ds le .

      Pense a bien vider ton cache .

      On peux discturer sur msn si tu veux.

      @+

    • Euh, tout ton post n’est pas passé Middir. lol

    • oups exact :

      alors sortir ton base href de ton inclure , j’avais eu des soucis avec des inclure dans mon head.

      as tu un email msn pour discuter en ligne ?

      @+

    • J’ai mis le base href dans tous les fichiers html du squelette.
      Qu’entends-tu par mettre en dur ?
      Non je n’utilise pas cet cocho... de MSN. ;)

      ++ et merci encore.

    • Middir je me permets de te passer mon adresse msn, car je m’arrache les cheveux (problème affiché plus haut dans le forum).

      misteratrox@hotmail.com

      Merci d’avance !

    • Bon tout est réglé pour moi, merci Middir :) (probleme de htacess...)

    • c’été koi le prb de .htacess ?

    • Et bien Middir ne m’a pas expliqué dans les détails dont je n’en sais pas plus. J’espère qu’il postera ici un message pour expliquer sa démarche, car tous mes problèmes sont réglés et ça pourrait aider du monde !

    Répondre à ce message

  • 3

    je me demande toujours pourquoi ce contrib fonctionne pour des personnes, et fonctionne pas pour d’autres

    ca fait presque une semaine que je bosse chaque jour avec ce problème, mais rien de tout

    y’avait middir qui as essayé de m’aider, mais il n’a jamais le temps ...

    je demande à l’admin de ce site, de nous proposer quelques choses qui marche ou bien de nous aider à régler tous ces problèmes ...

    Mercci d’avance

    • Désolé mais j’ai une vie a coté aussi ... j’ai bcp de boulot en ce moment. J’ai pris déjà pas mal de tps pour aider pas mal de personne et ce n’est pas en postant des commentaires comme ça que tu me donnes envie de t’aider.

      En plus ton premier problème a été réglé, maintenant tu parles d’un pb d’un pote a toi. Faut pas abusé de la gentillesse des gens. Aucune reconnaissance c’est fou.

      @+

    • Boris Lechner

      Bonjour.

      Pour commencer, si vous aviez saisi un nom pour chacun de vos messages, ou aviez créé un fil de discussion rien qu’à vous, il serait envisageable de regarder quel est votre problème.

      Mais là je n’en ai aucune idée.

      Si vous voulez être aidé, donnez-nous en les moyens, tant par la clarté de la description de votre problème que par la courtoisie du ton employé.

      Malgré cela, je reste bénévolement à votre disposition quand je le peux et attends une description de votre problème dans ce fil de discussion.

    • Merci midir, t’a reussi de régler mon problème, mais je sais pas comment tu l’a fait, et c’est ça ce que je cherche depuis 3 jours.
      Concernant l’autre site d’un pote à moi, oublions le, peu importe.

      J’en suis certain qu’il y’aura plusieurs personnes qui auront le même problème que moi, et middir à certainement la réponse.

      Donc, pour éviter plus de temps perdu pour rien, et à mon avis, vaux mieux expliquer la solution de problème en bref, et ca va pas prendre même pas 5min.

      Middir à bien compris le prb de mon site, avec ce contrib, et il a reussi de résoudre, mais je sais pas comment il l’a fait ....

    Répondre à ce message

  • 12

    bonjour
    je trouve pas le fichier mes-fonctions.php et j’oblient erreur404 sur toutes les articles et les rubriques avec ce contrib.

    www.colazen.com c’est le site en question

    Merci de votre aide.

    • assure toi de mettre la balise base href dans ton head,

      je viens d’y jeter un oeil et ce n’est pas present sur ton site.

      @+

    • je viens de l’ajouter, mais ca change rien, j’ai toujours des erreurs 404 sur tous les articles et les runriques ...

    • ok,

      je pense avoir trouvé ton erreur.

      Peux tu virer la ligne RewriteBase /spip/ dans ton .htaccess et relance apache .

      Ca devrais réglé le problem.

      Si tu lis un peux plus bas j’avais déja fais part de ce petit probleme.

      En espérant que ca puisse t’aider.

      @+

    • c’est fait, mais de nouveau ca marche pas
      c’est ma 4e journée avec ce problème et je me demande vraiment ce qui est va pas.

      Merci d’avance

    • Le base href doit etre present sur tout tes squelettes.

      Je viens de voir cette page : http://www.colazen.com/sss/ et la base href n’apparait pas .

      Je vois k’on avance bien car la le squelette commence a s’afficher :)

      Encore un effort :)

      @+

    • tient voila mon msn, je vx bien qu’on parle en ligne
      mr-l_impossible@hotmail.com

      Merci de m’ajouter

    • En ce qui me concerne cela ne vient pas du .htacces car j’ai fait un test avec :

      http://site/test.html qui correspond à http://site/test.php et cela fonctionne.

      Il y a donc bien un pb avec le base href.

      J’ai bien mis cette balise dans style.html du squelette alternatives, et elle apparait dans le code source du navigateur.

      J’avoue que je sèche.

      Si une bonne âme peut m’aiguiller je l’en remercie.

    • Boris Lechner

      Oulah, ne mélangez pas tout.

      Je viens de passer sur votre site, et votre problème est clairement un problème de redirection.
      Utilisez-vous la méthode par le ModRewrite ou par le fichier .htaccess ?

      Pour info, un problème de balise « base href » ne vous empêcherait pas de naviguer dans le site depuis la page d’accueil.

    • Bonjour Boris,

      Tout merci pour cette contribution.

      J’utilise le .htaccess comme dit dans les posts précédents.

    • Boris Lechner

      Ok. Où avez vous rangé le fichier spip-rewrite-with-404.php ?

      Quand j’essaie http://www.plafond-ile-de-france.fr/spip-rewrite-with-404.php j’obtiens une erreur 404, ce qui signifie qu’il n’est pas à la racine du site, alors qu’il devrait y être si vous n’avez pas modifié le contenu du fichier .htaccess

    • Oups là ... je crois que l’on s’est mal compris Boris, méa culpa.

      J’utilise le .htacces du mod_rewrite, autant pour moi.

      Et en plus je me suis trompée de post, c’était celui avec le squelette alternative, je comprends pourquoi vous avez du mal à vous y retrouver.

    • En effet, la méthode ErrorDocument fonctionne. Je garderais donc celle là.

      Merci Middir et Boris pour votre aide.

    Répondre à ce message

  • 3

    pr moi ca marche pas de tt
    il me donne error404 a chaque que je sélectionne une rubrique ou bien un article ... ;

    • Salut,

      peux tu donner plus d’indications sur ton probleme ?

      je serai ravi de t’aider :)

      Aussi si quelqu’un a une solution a mon probleme :

      Mon fill rss ne marche plus lorsque j’utilise cette facon de réecriture. Es ce que quelqu’un a eu le meme probleme et a réussi a réparé ?

      Dans l’attende de vous lire,

      Amicalement,

      middir

    • voila mon site qui est en realistion : http://www.colazen.com/
      le problème c que rien ne marche quand j’ai fait ce contrib ...

    • Tout d’abord, recopiez la fonction suivante dans le fichier mes_fonctions.php se trouvant dans votre dossier de squelettes :

      je le trouve pas ce fichier moi, il est où ?

    Répondre à ce message

  • 1

    Tout d’abord bravo à l’auteur pour ce plugin très utile,

    J’ai suivi les instructions à la lettre (enfin je le pense), l’arborescence fonctionne bien quand on cible un article ou une rubrique.
    Par contre, dès qu’il s’agit de cibler une page relative à l’auteur ou au plan du site, au forum, au rss, etc.
    Je tombe systèmatiquement sur le message « Not Found, The requested URL was not found on this server ».

    Pour être un peu plus clair ; le lien « Répondre à cet article » cible l’adresse
    http://monsite.com/spip/Francais/Sous-rubrique/spip.php?page=forum&id_article=3
    Page qui n’existe pas evidemment...

    En premier temps je pensais que le problème venait d’une mauvaise implantation de la balise <base href>, mais vu que les liens entre articles et rubriques fonctionnent, j’avoue être assez confus !

    Si quelqu’un à une idée ?

    • Pour ma part j’ai un peu bidouiller pour avoir le forum .

      Tu devrai essayer de mettre les liens vers le frum en dur dans ta page .

      Je reste a disposition si je peux t’aider.

      @+

    Répondre à ce message

  • 4

    Et alors donc (parce que j’ai toujours des problèmes moi...) comment je peux faire pour récupérer l’URL normale (spip), dans le cas d’un lien permettant de changer de langue ?

    Parce que là, il me fait des http://www.site.com/rubrique/article.html?lang=fr
    et forcément... ça marche pô.

    Je suppose (seulement) que ça vient du format de l’url... mais pas sûr, ça se trouve, je me viande totalement dans mon code pour changer la langue !

    • ou plus simplement... comment faire le chemin inverse pour que les variables d’url lang passent ?

    • Bon alors déjà, je ne m’y prenais pas comme il faut pour le site multilingue...
      Maintenant tout est bon, mais il subsiste une bizarrerie.

      J’affiche #MENU_LANG et une fois sorti de la page d’accueil, l’url générée par ce menu n’est pas la bonne puisqu’au lieu de revenir à la racine, il se place dans la rubrique en cours (via les urls propres).
      Plus étonnant, /rubrique/article.html&lang=en affiche une belle erreur 404 alors que l’article est traduit. Evidemment puisqu’il s’attend à une version anglaise de l’url, qui elle fonctionne très bien...

      Est-ce que je dois aussi traduire les urls propres ???

    • Vincent

      Bonjour Valentin,

      as tu réussi à corriger le problème avec lang=en ?

      j’ai le même souci

      merci

      Vincent

    • Valentin

      Non pas encore, j’ai mis de côté la traduction... trop de problèmes avec les urls propres et avec certains plugins. C’est un souci pour moi car je ne suis pas développeur et au bout d’un moment ça dépasse mon champ de compétences.

    Répondre à ce message

  • 1

    Ce plug-in ne semble pas compatible avec la découpe d’article.

    Comment est-ce qu’on peut empêcher la réécriture pour une URL ?

    • J’ai peut-être trouvé...

      J’ai remarqué que l’url des liens suivant / précédent revient à la racine.
      Au lieu d’avoir http://www.site.com/rubrique/article.html&artpage=2, on a en réalité http://www.site.com/article.html&artpage=2

      La page n’existe donc pas... normal quoi.
      Mais après... on fait comment pour rétablir ça ?

    Répondre à ce message

  • 1

    Tout d’abord merci pour cette superbe contrib qui améliore considérablement le référencement et rend facile la lecture pour les utilisateurs.

    Je rencontre un problème qui n’a pas été soulevé... ou presque.

    J’ai appliqué la contrib à la virgule près, en mentionnant bien le base href, en utilisant mod_rewrite.
    J’obtiens invariablement des erreurs 404 sur l’ensemble du site (rubriques, articles, etc.). J’ai suivi les conseils donnés, vidé le cache, effacé les urls propres... rien n’y fait.

    L’erreur est générée par apache et il semble ne pas trouver le fichier /spip/spip.php, ce qui est incohérent car je n’ai pas de sous-dossier /spip/

    merci pour l’aide !

    • Oui bon ok ;-)

      J’ai commenté la ligne RewriteBase /spip/ du fichier .htaccess

      No comment ! Ca marche d’enfer !!! Génial !!! Merci !!!

    Répondre à ce message

  • 25

    Bonjour,

    Ça a l’air très bien et j’ai très envie d’essayer : il paraît que le référencement est sensiblement amélioré ? J’ai tout de même une question : est-ce que ce mode de ré-écriture est compatible (pris en compte) par le plugin sitemap ?

    cordial,
    cb.

    • Bon, je viens d’essayer : ça ne marche pas :
      -  les articles ne changent pas d’URL (même après réinitialisation par le plugin)
      -  Les reubriques sont en Erreur 404

      Une idée ?

      cb.

    • Boris Lechner

      Bonjour, concernant le référencement, je ne sais pas si c’est encore d’actualité : les moteurs de recherche s’améliorent de plus en plus. Mais en tout cas, les urls sont plus compréhensibles par les humains, et collent plus aux standards du web.

      Je ne connais pas le plugin sitemap, mais si celui-ci fonctionne avec les urls propres de standards de spip (et je présume fortement que ce soit le cas), cela fonctionnera avec celles-ci.

    • Boris Lechner

      Bon, je viens d’essayer : ça ne marche pas :
      les articles ne changent pas d’URL (même après réinitialisation par le plugin)
      Les reubriques sont en Erreur 404
      Une idée ?
      cb.

      Je viens de passer sur votre site, il semblerait que vous ayez avancé depuis le message. Les rubriques et articles fonctionnent, les urls sont propres. Il vous reste à ajouter le <base href> pour que la feuille de style soit à nouveau appliquée.

    • Oui merci, c’est presque bon : il y a un détail encore : je ne comprends pas pourquoi les url propres des sites référencés et des mots clés sont générées avec des numéros : j’ai bidouillé avec les mots clés (non recalcul des propres2), mais avec les sites, ça donne parexemple :

      http://www.eros-thanatos.com/@site9@.html

      au lieu du nom du site dans l’url.

      Une idée là-dessus ?

      merci encore, c’est très bon cette arborescence virtuelle.

      cb.

    • Oui merci, c’est presque bon : il y a un détail encore : je ne comprends pas pourquoi les url propres des sites référencés et des mots clés sont générées avec des numéros : j’ai bidouillé avec les mots clés (non recalcul des propres2), mais avec les sites, ça donne parexemple :
      http://www.eros-thanatos.com/@site9@.html
      au lieu du nom du site dans l’url.
      Une idée là-dessus ?

      Ouaoutch ! Merci à toi, tu viens de débusquer un splendide bug affectant les auteurs, les sites et les mots-clés...
      Le bug concernait la version 1.5, et la 1.6 (déjà en ligne !) le corrige.

      Procédure de mise à jour :

      Remplacer le fichier monDossierSpip/ecrire/urls/propres-arbo.php par le fichier propres-arbo.php contenu dans l’archive url-propres-arbo-v1.6.zip.
      Attention, si la taille des urls avait été personnalisée, il faut penser à replacer ces réglages dans le nouveau fichier.

    • Ah ! Ok !

      Bon mais pour l’instant je suis revenu aux urls propre2, sinon je perds mes 1000 visites d’un coup en attendant les prochains passages des bots. Comme Google me met dans la sandbox régulièrement, je profiterai d’un tour dans le bac à sable pour changer les urls propres en arborescence virtuelle.

      Merci à toi, ça faisait longtemps que j’attendai de tels scripts, qui avaient toujours plus ou moins échoués jusqu’à présent (ou disons qui ressemblaient plus à du bidouillage — opinion perso !).

      @+, cb.

    • A l’ aide, j’ ai suivi à la lettre le consigne, en local ca marche bien mais une fois sur le serveur ca veut pas, il me montre Erreur 404 . Le serveur supporte pourtant l’ urlpropres2

    • Boris Lechner

      A l’ aide, j’ ai suivi à la lettre le consigne, en local ca marche bien mais une fois sur le serveur ca veut pas, il me montre Erreur 404 . Le serveur supporte pourtant l’ urlpropres2

      Si vous avez utilisé à un moment ou un autre les urlpropres2, il faut utiliser le plugin « Effacer url propres » pour remettre à zéro toutes les urls propres. L’avez-vous fait ?

    • Boul25

      Bjr,

      Oui, j’ ai aussi effacer l’ url propre, et en local ca marche bien

      En ligne, lorsque on clique sur un lien www.monsite/le-titre-rubrique.html, le serveur n’ arrive pas à associer à quel numéro rubrique cela correspond. voila mon observation toute la nuit

    • Bjr,
      Oui, j’ ai aussi effacer l’ url propre, et en local ca marche bien
      En ligne, lorsque on clique sur un lien www.monsite/le-titre-rubrique.html, le serveur n’ arrive pas à associer à quel numéro rubrique cela correspond. voila mon observation toute la nuit

      Si vous avez bien effacé toutes les urls propres et vidé le cache et que ça ne fonctionne toujours pas, ça peut être un problème de redirection. Quelle méthode utilisez-vous ? Le mod-rewrite ou la directive ErrorDocument ? Qu’obtenez-vous comme page d’erreur ? Une erreur 404 générée par Apache ou par Spip ? Et quelle version de Spip utilisez-vous ?

    • Bjr,
      Oui, j’ ai aussi effacer l’ url propre, et en local ca marche bien
      En ligne, lorsque on clique sur un lien www.monsite/le-titre-rubrique.html, le serveur n’ arrive pas à associer à quel numéro rubrique cela correspond. voila mon observation toute la nuit

      En essayant diverses choses, j’ai trouvé un nouveau bug, ne concernant que les personnes utilisant la redirection par ErrorDocument. La variable $this->installdir doit être positionnée à « ,^/, » ou « ,^/dossier/install/spip/, ». En bref, il faut simplement ajouter le caractère ^ après la première virgule.
      L’article est modifié, ainsi que le fichier de l’archive, ce qui nous donne la version 1.8 !

    • boul25

      J’ utilise la version 1.9.2 de SPIP, la toute dernière je crois. J’ utilise le mode rewrite.

      En gros mon promblème est que www.monsite.com/titre-rubrique/mon-article.html (qui équivaut en réalité à www.monsite.com/spip.php?article15 ) il reconnait pas quel est le numéro de l’ article, et aucune boucle n’ est exectuer. ( il ne s’ agit plus d’ Erreur 404, mais un problème de passage de variable je penses car il associe bien l’ url arbo aux fichier article.html du squelette mais c’est le passage de la valeur qui passe pas)

    • j’ai également un problème concernant le passage de variable. Mais pour moi cela concerne les rubriques. Par exemple lorsque je clique sur une rubrique dont l’adresse est : « http://localhost/l-art-de-vivre/l-art », il me met une page 404 et il me rajoute l’adresse suivante à la barre à la barre d’adresse : « http://localhost/l-art-de-vivre/l-art/l-art-de-vivre/l-art » .
      Sinon j’utilise le mod-rewrite avec htaccess. J’ai également essayé avec la redirection errorDocument mais j’ai la même erreur.

    • Boris Lechner

      J’ utilise la version 1.9.2 de SPIP, la toute dernière je crois. J’ utilise le mode rewrite.
      En gros mon promblème est que www.monsite.com/titre-rubrique/mon-article.html (qui équivaut en réalité à www.monsite.com/spip.php ?article15 ) il reconnait pas quel est le numéro de l’ article, et aucune boucle n’ est exectuer. ( il ne s’ agit plus d’ Erreur 404, mais un problème de passage de variable je penses car il associe bien l’ url arbo aux fichier article.html du squelette mais c’est le passage de la valeur qui passe (...)

      Ok, vous avez bien vu mon message précédant et appliqué la correction nécessaire ? Parceque les symptômes me laissent penser le contraire.

    • Boris Lechner

      j’ai également un problème concernant le passage de variable. Mais pour moi cela concerne les rubriques. Par exemple lorsque je clique sur une rubrique dont l’adresse est : « http://localhost/l-art-de-vivre/l-art », il me met une page 404 et il me rajoute l’adresse suivante à la barre à la barre d’adresse : « http://localhost/l-art-de-vivre/l-art/l-art-de-vivre/l-art » . Sinon j’utilise le mod-rewrite avec htaccess. J’ai également essayé avec la redirection errorDocument mais j’ai la même (...)

      Là c’est clair, vous n’avez pas positionné le <base href=...> dans vos squelettes.
      Je vous invite à revoir le paragraphe « Modifications à apporter à vos squelettes ».

      N’oubliez pas ensuite de vider le cache !

    • J’ai toujours pas résolu mon probleme d’url. En effet, j’ai installé mon spip dans un répertoire dont le chemin est (racine>art>art-metier) et dans mon fichier head j’ai mis la ligne <base href="#URL_SITE_SPIP"> et dans le fichier .htaccess la ligne RewriteBase /art/art-metier/.
      Est ce bien cela ?

    • J’ai toujours pas résolu mon probleme d’url. En effet, j’ai installé mon spip dans un répertoire dont le chemin est (racine>art>art-metier) et dans mon fichier head j’ai mis la ligne et dans le fichier .htaccess la ligne RewriteBase /art/art-metier/. Est ce bien cela ?

      Alors, si je saisis bien, pour accéder à votre site spip, vous devez saisir l’adresse http://votreSite.exemple/art/art-metier/. Si c’est bien cela, votre configuration semble ok. Reste à vérifier ce que #URL_SITE_SPIP donne chez vous. En principe, ça devrait être http://votreSite.exemple/art/art-metier/ aussi. si ça n’est pas le cas, vous avez trouvé la source de vos problèmes !

    • Boul25

      euhh, explique moi un peu plus svp, votre message indique le bug pour l’ utilisation du script Errodocument, moi j ’utilise le mod-rewrite de Apache..., quel fichier modifier ?

      Merci encore

    • Au fait il y’a une chose très importante que j’ai oublié de préciser. J’ai constaté que ça marche pour mes articles. Le problème apparait que quand je clique sur une rubrique sachant que sur le squelette de mes rubriques (rubrique.html) je fais une redirection sur un article. Le problème est donc le suivant : quand je clique par exemple sur une rubrique nommé art/metier, il m’affiche une page 404 en me disant qu’il ne trouve pas l’article nommé art/metier/art/metier/artisanat.html (redirection vers l’article artisanat.html). par la suite il m’a rajouté le chemin (art/metier/artisanat.html) de l’article en plus du chemin de la rubrique (art/metier/) au lieu de m’afficher tout simplement art/metier/artisanat.html.

      J’espère que j’ai été assez clair. Merci

    • Boris Lechner

      Au fait il y’a une chose très importante que j’ai oublié de préciser. J’ai constaté que ça marche pour mes articles. Le problème apparait que quand je clique sur une rubrique sachant que sur le squelette de mes rubriques (rubrique.html) je fais une redirection sur un article. Le problème est donc le suivant : quand je clique par exemple sur une rubrique nommé art/metier, il m’affiche une page 404 en me disant qu’il ne trouve pas l’article nommé art/metier/art/metier/artisanat.html (redirection vers l’article artisanat.html). par la suite il m’a rajouté le chemin (art/metier/artisanat.html) de (...)

      J’insiste sur le <base HREF...>. Si celui-ci est bien en place, c’est un problème lié à votre manière de rediriger, dont j’ignore tout.

    • Pourtant j’arrive bien à voir les articles et aussi j’ai bien mis <base href=#URL_SITE_SPIP avec #URL_SITE_SPIP qui me donne bien l’adresse de mon site. Sinon concernant la redirection que j’ai fait dans le squelette rubrique.html, j’ai mis une boucle qui me dis qu’a chaque foi que je clique sur une rubrique, je me redirige (

      <? header("Location: #URL_ARTICLE"); ?>

      ) vers un article ayant un mot clé donné (que j’ai définit lors de sa création) (j’utilise le plugin squelette par mot clé).

      En fait, je sais pas, si j’avais fait une erreur sur <base href="..> j’aurais peut être la même erreur en essayant d’afficher un article ou que le système ne trouverais pas mes fichiers css. mais bon peut être qu’il y’a quelque chose qui m’échappe je vais essayer de creuser encore.

    • Boris Lechner

      Pourtant j’arrive bien à voir les articles et aussi j’ai bien mis ) vers un article ayant un mot clé donné (que j’ai définit lors de sa création) (j’utilise le plugin squelette par mot clé).
      En fait, je sais pas, si j’avais fait une erreur sur j’aurais peut être la même erreur en essayant d’afficher un article ou que le système ne trouverais pas mes fichiers css. mais bon peut être qu’il y’a quelque chose qui m’échappe je vais essayer de creuser encore.

      Ok, j’ai compris le problème. C’est bien la redirection. Comme la redirection se fait par une adresse virtuelle http://site.exemple/nomRubrique/ et que #URL_ARTICLE donne une URL relative (du style nomRubrique/titreArticle.html), vous êtes très logiquement redirigé vers http://site.exemple/nomRubrique/nomRubrique/titreArticle.html.

      La solution est simple et consiste à modifier votre <? header("Location: #URL_ARTICLE"); ?> en <? header("Location: (#URL_ARTICLE|url_absolue)"); ?>

    • Merci ça marche par contre j’ai mis

      <? header("Location:[(#URL_SITE_SPIP)][(#URL_ARTICLE)]");?>

      au lieu de

      <? header("Location:[(#URL_ARTICLE|url_absolue)]");?>

      .

    • Je rencontre le même probleme. C’est à dire les url s’affichent dans la barre d’adresse mais aucune boucle n’est exécutée.
      Si quelqu’un peut nous aider qu’il nhésite pas.

    • Agent A Gadge

      Bonjour, votre patch a l’air bien cependant, je bloque. J’utilise la version 1.9.2b de SPIP et je n’arrive pas a trouver le fichier mes_option.php

      Je ne sais pas pourquoi. Si quelqu’un a la réponse. Merci D’avance

    Répondre à ce message

  • 1
    Nicolas

    Bonjour

    J’ai installé ce système, qui semble fonctionner.

    Par contre, j’aurai aimé garder les anciennes url de rubriques.
    Par exemple : « Les actualités » a comme url « /_actualites/ ».

    J’ai modifié l’url dans la base de donnée, mais, lorsqu’il construit l’url de l’article, il semble recalculer l’url sans tenir compte de l’url de la rubrique.
    Ce qui donne : /les-actualites/mon-article.html
    (j’aurai bien aimé : /_actualites/mon-article.html)

    Il faut que je modifie le script ?

    Répondre à ce message

  • 1

    Salut Boris,

    Tout d’abord bravo et merci enormement de cette contrib :)

    Je l’ai testé et je n’ai pas eu besoin de faire appel a Jack :D

    Par contre j’ai un petit soucis concernant un formulaire intégré a mon squelette.

    En effet toutes mes conditions ne semble pas marcher avec ta methode de reecriture... J’ai l’impression que quand je lance le formulaire il ne fait que se réafficher et ne prend pas en compte de tout mon code php.

    As tu une idée de ce qui peut me bloquer ?? Pour info sur d’autre site je faisais la meme chose avec les urls propres et cela marche trés bien .

    Merci encore de ton aide,

    J’attend de te lire,

    Cdlt,

    middir

    • Je me réponds,

      Je viens de m’appercevoir que dans le .htaccess la ligne suivante n’était pas commentée par defaut :

      RewriteBase /spip/

      Pour ma part le site est a la racine du serveur et non pas dans un dossier SPIP, faudrai peut etre le mettre en comment par defaut , qu’en penses tu Boris ??

      Je suis sur que ca peut aider pas mal d’entre vous qui ont du avoir des difficultés .

      Je me suis rendu compte de l’erreur dans les logs du serveur voila ce que j’ai récupéré avant rectification du htaccess :

      [Wed Jun 06 21:43:45 2007] [error] [client xxx.xxx.xxx.xxx] File does not exist : /var/www/vhosts/xxxx.COM/httpdocs/spip

      c’est ce qui m’a mis la puce a l’oreille :)

      en espérant que ca pourra aider certain d’entre vous n’hésitez pas a me le faire savoir :)

      c’est peut etre ca qui bloque le bon fonctionnement du plugin forms et table avec cette contrib, a tester :)

      @+

      middir

    Répondre à ce message

  • 3
    Adrien

    Bonjour,

    Lorsque j’ai voulu mettre les urls sur mon site,

    J’ai fait toute les manips qui sont marquées sur l’article, mais j’ai un problème.

    Quand je vais sur n’importe qu’elle page de mon site, j’ai une fenêtre d’alerte qui s’ouvre où il est marqué « Bouton Texte à besoin de jQuery »

    Auriez-vous une solution ?

    P.S. : j’ai utilisé la redirection avec le mod_rewrite.

    • Bonjour,
      Lorsque j’ai voulu mettre les urls sur mon site,
      J’ai fait toute les manips qui sont marquées sur l’article, mais j’ai un problème.
      Quand je vais sur n’importe qu’elle page de mon site, j’ai une fenêtre d’alerte qui s’ouvre où il est marqué « Bouton Texte à besoin de jQuery »
      Auriez-vous une solution ?
      P.S. : j’ai utilisé la redirection avec le mod_rewrite.

      Je ne connais pas ce plugin, mais j’imagine qu’il cherche la bibliothèque jQuery en générant une adresse complète à partir de la page courante. Du coup, il cherche à charger quelque chose du genre http://votresite.exemple/secteur/rubrique/jQuery.js au lieu de http://votresite.exemple/jQuery.js. Il faut donc regarder de ce côté là.

    • Boutonstexte ne cherche rien du tout puisqu’il utilise le jQuery du core.

      Si ce message apparait, c’est que urls-propres-arbo casse ce chargement, ce qui n’est pas étonnant puisque c’est basé sur le répertoire courant ... qui est donc virtuel ici.

      Donc tout plugin ou autre qui utilise jQuery voire d’autres ressources du même type ne fonctionnera pas.

      Par ailleurs, je ne pense pas que la solution soit d’aller « hacker » ce core comme tu le fais déjà, ça rend impossible tout upgrade ou alors il faut tout refaire. Il faudrait voir coté $GLOBALS[’profondeur_url’]

      Enfin, tu aurais tout intérêt à transformer ta contrib en plugin, il n’y aurait alors pas à déplacer des fichiers ou éditer mes_options.php. Voir l’exemple de Urls Libres sur la zone.

      Je trouve tes urls arborescentes très intéressante, à terme, j’aimerais intégrer ça comme option possible dans urls libres qui devrait rassembler tout ce qui existe de manière éparse pour les urls « propres » de manière configurable.

    • Boris Lechner

      Par ailleurs, je ne pense pas que la solution soit d’aller « hacker » ce core comme tu le fais déjà, ça rend impossible tout upgrade ou alors il faut tout refaire. Il faudrait voir coté $GLOBALS[’profondeur_url’]

      J’adhère totalement à cela. Je ne connaissais pas $GLOBALS[’profondeur_url’], mais je m’y pencherai dès que j’en aurai le temps.

      Enfin, tu aurais tout intérêt à transformer ta contrib en plugin, il n’y aurait alors pas à déplacer des fichiers ou éditer mes_options.php. Voir l’exemple de Urls Libres sur la zone.

      Pareil, j’adhère totalement. J’ai vite essayé de regarder comment faire, mais je n’ai pas dû trouver la doc qui va bien, et je manquais de temps pour regarder et comprendre le code d’un plugin.

      Je trouve tes urls arborescentes très intéressante, à terme, j’aimerais intégrer ça comme option possible dans urls libres qui devrait rassembler tout ce qui existe de manière éparse pour les urls « propres » de manière configurable.

      Pas d’objection, votre honneur, si je peux aider, n’hésite pas.

    Répondre à ce message

  • Bonjour !
    Merci pour cet outil vraiment chouette et simple à mettre en place ! Par contre, j’utilise le plugin forms et table et il semble que ca ne fonctionne pas lors de l’envoi des donnees des formulaires : on a un truc du style http://monsite.com/mapage_formulaire.html au lieu de http://monsite.com/mon_arborescence/mapage_formulaire.html.
    Voila tout, merci pour vos solutions !
    Steve A.

    Répondre à ce message

  • 2

    Hello,

    tout d’abord un grand merci pour cette contrib essentielle !

    Ensuite, je voudrais vous faire part du problème que j’ai rencontré et vous soumettre la modification que j’ai dû mettre en œuvre pour le contourner (Attention, message long) :

    J’utilise à plusieurs endroits d’un site dont je m’occupe la balise #SELF pour rappeler la page en cours en lui passant des paramètres supplémentaires. Depuis la mise en place des urls ’propres-arbo’ je me suis rendu compte que cette balise renvoyait systématiquement à la racine du site, rendant mes liens inutilisables.

    Après qq recherches dans le code de SPIP, je me suis rendu compte qu’un traitement de nettoyage un peu violent (Et surtout incompatible avec votre contrib) de l’url était effectué dans la fonction self() sauf si celle-ci étaient appelée avec un paramètre « root » à ’true’ (Fonction définie dans le fichier ecrire/inc/utils.php). J’ai donc modifié la définition de la balise #SELF pour inclure ce paramètre.

    Après qq tests (Non exhaustifs !) je n’ai pas remarqué d’effets de bord indésirables. Je vous soumets donc cette modification qui pourra pê servir à d’autres.

    ATTENTION : Cette modification est dangereuse car elle se fait dans les fichiers de SPIP et c’est mal, vous voilà prévenus.

    Il faut modifier le fichier ecrire/public/balises.php (Ligne 930 pour la version 1.9.2a) comme résumé dans ce diff :

    *** balises-org.php
    --- balises.php
    *** 927,933 ****
      // http://www.spip.net/@self
      // http://doc.spip.org/@balise_SELF_dist
      function balise_SELF_dist($p) {
    !       $p->code = 'quote_amp(self())';
            $p->interdire_scripts = false;
            return $p;
      }
    --- 927,933 ----
      // http://www.spip.net/@self
      // http://doc.spip.org/@balise_SELF_dist
      function balise_SELF_dist($p) {
    !       $p->code = 'quote_amp(self(true))';
            $p->interdire_scripts = false;
            return $p;
      }

    Si vous avez une solution plus élégante je suis preneur, bien évidemment :-) .

    • En utilisant la surcharge, il suffirait simplement de redéfinir la balise SELF avec cette même fonction intitulée « function balise_SELF($p) » et placée dans mes_fonctions.php par exemple.

    • Exact, ça fonctionne parfaitement.

      Merci beaucoup pour l’astuce (J’oublie trop souvent ces possibilités de surcharge, que j’utilise par ailleurs pourtant).

    Répondre à ce message

  • Bonjour, D’abord je me permet de vous féliciter pour le travail que vous avez fait. En ce moment je l’utilise et ça marche bien ; Par contre j’ai un petit souci concernant mes ancres. J’ai mis différents encres sur mes pages et quand on clique dessus il s’y retrouve plus. Sinon ça marche pour le reste. Merci d’avance.

    Répondre à ce message

  • 1
    Anthony

    Bonjour,
    j’attendais ce système d’url pour spip depuis des années, merci !
    Mais ... J’ai des erreurs 404. Il me semble avoir tout fait correctement.
    Je teste ce système et je me suis créé un sous domaine sur mon domaine déjà existant. Est ce lié à cela ? Dois-je donc changé mon rewrite base ?

    Merci d’avance.

    • Boris Lechner

      Bonjour, j’attendais ce système d’url pour spip depuis des années, merci ! Mais ... J’ai des erreurs 404. Il me semble avoir tout fait correctement. Je teste ce système et je me suis créé un sous domaine sur mon domaine déjà existant. Est ce lié à cela ? Dois-je donc changé mon rewrite base ?
      Merci d’avance.

      En principe, si vous avez suivi mes recommandations, le rewritebase est valable uniquement pour le répertoire de Spip. Donc il devrait être appliqué pour le bon domaine (sous-domaine). Si votre Spip est bien configuré comme étant sur le sous-domaine, je ne vois pas pourquoi ça ne fonctionnerait pas. En résumé, il me manque des informations pour pouvoir essayer de vous aider.

      Avez-vous des erreurs 404 pour toutes les pages ?

    Répondre à ce message

  • 2
    Pierre

    Tout semble fonctionner au poil... J’ai pourtant encore un petit soucis :

    Je travaille sur un site bilingue ou les deux rubriques racine s’appellent « en » et « fr ». L’arborescence s’affiche correctement sur les adresses générés pour l’ensemble des pages (articles, rubriques, mots, etc...), sauf pour les pages de rubriques situées à la racine du site. Autrement dit, une boucle :

    <BOUCLE_rublang(RUBRIQUES){RACINE}>
       <a href="#URL_RUBRIQUE">#TITRE</a>
    </BOUCLE_rublang>

    me renvoie systématiquement des liens sous la forme http://mon_site_spip/rubriqueXX où XX est le numéro de la rubrique concernée. Impossible de généré l’url : http://mon_site_spip/en/

    Quelqu’un a une idée...

    • Pierre

      Bon, je me répond à moi-même après avoir compris le « problème ». Un sécurité du siltre de réécriture des adresses. Ca se passe dans le fichier propres-arbo.php qu’on a placé dans /ecrire/urls
      Autours de la ligne 175, on a :

      	// S'il reste trop de caracteres non latins, ou trop peu
      	// de caracteres latins, utiliser l'id a la place
      
      	if (preg_match(",([^a-zA-Z0-9 /+*=].*){5},", $url, $r)
      	OR strlen($url)<3) {
      		$url = $type.$id_objet;
      	}

      Ainsi donc, un titre de rubrique inferieur à 3 caractères latin est simplement ignoré et remplacé par sa version rubriqueXX, ce qui était mon cas ! J’ai donc remplacé la condition strlen($url)<3 par strlen($url)<1

    • Effectivement, et c’est bien vu !
      Du coup j’ai rajouté cela en option dans la version 1.7 (en ligne), et dorénavant la vérification est désactivée par défaut.
      Tout se joue avec la nouvelle variable _taille_min_url_propre qui est initialisée à 0 par défaut (cf. cet article, que je viens de mettre à jour).

    Répondre à ce message

  • traker

    hello,
    Je voudrais poser une question qui s’eloigne un peu du sujet actuel.. J’utilise les url propres 2 et mes articles possèdent un titre et un surtitre..

    J’aimerai passer dans l’url, le titre plus le surtitre.. du style

    titre:spip
    surtitre:vive internet

    j’obtienne http.xxxxxxxx.com/spip-vive-internet.html

    Et bien comment faire ?! Je suppose que ca se trouve dans le fichier propre.php mais a quelle ligne ? Merci pour votre aide.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

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