La réécriture d'URL native de SPIP sans modifier la conf apache
Publié le 13 septembre 2005
Créé le 29 août 2005

J'ai créé une contrib SPIP qui gère la réécriture des URL sans que cela nécessite que le mod_rewrite d'apache soit activé. C'est le cas pour les serveurs web gratuits de free.

Je suis parti sur une copie du fichier inc-urls-prores.php3 auquel j'ai appliqué les modifications suivantes [1] :

  1. Ligne 15 : remplacer _INC_URLS2 par _INC_BALLUCHE
  2. Lignes 90 à 92 : mettre en commentaire ces lignes. C'est pour avoir une url comportant tout le titre
                
    if (strlen($url2) > 35) {
                    break;
                }
  3. Lignes 103 à 107 : mettre en commentaire ces lignes.
        $query
    = "SELECT $col_id FROM $table
            WHERE url_propre='"
    .addslashes($url)."' AND $col_id != $id_objet";
        if (
    spip_num_rows(spip_query($query)) > 0) {
            
    $url = $url.','.$id_objet;
        }
  4. Lignes 128, 136, 144, 157, 165 : fabriquer les nouvelles urls
            
    return lire_meta("adresse_site" ) . "?$id_article/$url";
            return
    lire_meta("adresse_site" ) . "?$id_rubrique/-$url-";
            return
    lire_meta("adresse_site" ) . "?$id_breve/+$url+";
            return
    lire_meta("adresse_site" ) . "?$id_mot/+-$url-+";
            return
    lire_meta("adresse_site" ) . "?$id_auteur/_${url}_";
  5. Lignes 203 à 204 : mettre en commentaires ces lignes.
    preg_replace
    ('/^&/','?',
    preg_replace("/[?&]$id_table_objet=$id_objet/",'',$regs[5]));
  6. Lignes 212 et au delà : supprimer
        $url_propre
    = $GLOBALS['_SERVER']['REDIRECT_url_propre'];
        if (!
    $url_propre) $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre'];
        if (!
    $url_propre) {
            
    $url = substr($url, strrpos($url, '/') + 1);
            
    $url_propre = preg_replace(',[?].*,', '', $url);

    (...)

        
    $result = spip_query($query);
        if (
    $row = spip_fetch_array($result)) {
            
    $contexte[$col_id] = $row[$col_id];
        }

        return;

[1] si les fichier in-urls-propres.ph3 venait à changer, il vous suffit d'appliquer ces modifications

Forum de l'article

# 41 > La réécriture d'URL native de SPIP sans modifier la conf apache 30 août 2005, par Aref
Bonjour, Je voulais savoir s'il existe une solution CMS tel SPIP ou une autre, qui permet de gérer mes abonnements à différentes newslettres, c'est àdire, au lieu de les recevoir dans ma boite email, je les recois directement sur la plateforme en question : blog, portail collaboratif... Merci pour votre aide Cordialement
# 43 > La réécriture d'URL native de SPIP sans modifier la conf apache 30 août 2005, par Frédéric

Cà existe. Cà s'appelle bloglines. ;-)

En effet, bloglines permet de lier des comptes mails à son interface d'aggrégation des flux provenant des blogues.

# 44 > La réécriture d'URL native de SPIP sans modifier la conf apache 30 août 2005
en fait, je cherchais pas des agrégateurs de fils rss, mais plutot des solutions qui font acheminer les newslettres vers ma plateforme CMS, qu'elle soit un blog ou un site collaboratif ! Merci encore une fois
# 48 > La réécriture d'URL native de SPIP sans modifier la conf apache 9 septembre 2005, par Henri

Bonjour,

Tout d'abors félicitations pour cette contribution efficace. Chez moi, tout semble fonctionner excepté 2 redirections internes d'articles (alors que toutes les autres marchent) :

-  Rubrique La tribune>Archives>La tribune - archive html

-  Rubrique Les pages professionelles>Archives>Les pages professionnelles - Archive html
(J'ai momentanément rajouter un CLIQUER ICI pour pallier cet inconvénient).

Et surtout la page resume.php :

Fatal error : Call to undefined function : generer_url_forum_dist() in /home/medecine/www/opimed/inc-urls-opimed.php on line 131

(correspondant à la ligne 139 de inc-urls-balluche.php3)

Alors que sur ton site la page resume.php3 fonctionne parfaitement.

Aurais-tu une idée ?

Amicalement

OpiMed
# 49 > La réécriture d'URL native de SPIP sans modifier la conf apache 10 septembre 2005, par Frédéric
Cà existe, çà s'appelle gmane -).
# 50 > La réécriture d'URL native de SPIP sans modifier la conf apache 10 septembre 2005, par Frédéric
Essayez par utiliser la contrib telle quelle (ne pas renommer le fichier inc-urls-balluche.php3 pour voir si çà marche.
# 51 > La réécriture d'URL native de SPIP sans modifier la conf apache 10 septembre 2005, par Henri

Merci Frédéric

Je teste le fichier original cette nuit et je vous tiens au courant.
Mais je dois au minimum transformer les php3 en php puisque ma version 1.8 est en php.

Amicalement

# 53 > La réécriture d'URL native de SPIP sans modifier la conf apache 12 septembre 2005, par Henri

Bonjour Frédéric,

J'ai suivi votre conseil et employé les fichiers originaux avec seulement la modification php3 en php.

Le problème demeure identique sur la page resume.php :

Fatal error : Call to undefined function : generer_url_forum_dist() in /home/medecine/www/opimed/inc-urls-balluche.php on line 141

Et curieusement plus une seule redirection ne fonctionne...

Merci de votre aide

# 54 > La réécriture d'URL native de SPIP sans modifier la conf apache 13 septembre 2005, par Frédéric
Quelle est ta version de SPIP ? Vérifie qu'elle définit la fonction noyau "generer_url_forum_dist()". J'ai modifié cet article pour que tu puisse créer un fichier "inc-urls-balluche.php3" par toi même.
# 56 > La réécriture d'URL native de SPIP sans modifier la conf apache 17 septembre 2005, par Henri
Je suis confus, mais je n'y arrive pas. Ma version est une 1.8 beta 6 CVS que j'avais sans doute déjà un peu bricolée. Je reprendrais tout ça avec une version "propre". Merci encore de l'aide efficace comme de la disponibilité.
# 176 La réécriture d'URL native de SPIP sans modifier la conf apache 10 juillet 2006, par jc

bonjour et merci pour cette contrib... elle ne marche plus avec la 1.9 alors j'ai utilisé <?php $type_urls = 'propres-qs' ; ?> MAIS

http://jc.sekinger.free.fr/ ?Le-tricycle&var_mode=calcul me donne une page blanche... et toutes les urls terminées par &var_mode=calcul. (le site est chez free)

1. mes_options (ecrire/) : <?php $type_urls = 'propres-qs' ; ?> si je le supprimes ça marche

2. en local aucun souci (wamp)

3. les urls terminées par &var_mode=recalcul s'affichent normalement chez free

4. si je demande http://jc.sekinger.free.fr/spip.php ?id_article=90&var_mode=calcul ça marche

5. quand les caches sont vides http://jc.sekinger.free.fr/spip.php ?action=redirect&id_article=90&var_mode=calcul marche une seule fois... si je retourne dans le backoffice et que je refais http://jc.sekinger.free.fr/spip.php ?action=redirect&id_article=90&var_mode=calcul ça ne marche plus.

6. Je suis seul à constater le problème et free n'est pas mon fai (c'est mamadou)

bref ça me fait du petit souci cette histoire là... est-ce que tu comprends quelque chose là ?

# 223 La réécriture d'URL native de SPIP sans modifier la conf apache 12 octobre 2006, par JP
Bonjour, j'ai installé facilement la contrib sur une 1.8.2g. Les URLS sont magnifiques ... MAIS ... je reste toujours sur la même page ! En fait, c'est comme si chaque clic appelait l'URL réécrite tout en restant sur la page actuelle. très très bizarre ... ?? Etant moi-même un néophyte, pour ne pas dire un béotien voire même une véritable bille en PHP, j'aurai vraiment besoin d'un coup de main. Merci d'avance JP
# 224 La réécriture d'URL native de SPIP sans modifier la conf apache 13 octobre 2006, par Frédéric

J'ai compris. C'est tout simplement votre hébergeur qui n'a pas déclaré comme page par défaut la page index.php avant toutes les autres (index.html, index.htm, default.html) etc. Si ces pages existent supprimez-les (vérifiez avant quand même -) ) ! Si vous avez accès à votre config apache modifiez le fichier /etc/httpd/httpd.conf. Sinon il suffit d'ajouter dans le fichier in-urls-balluche.php3, "index.php" juste avant le ? dans les fonctions generer_url...

voici ce que çà devrait donner :

http://www.cheminsoublies.com/index.php ?16/Randonnee-a-la-journee

Pour réduire encore l'url, vous pouvez renommer index.php en i.php voire i tout court par exemple. A essayer.

# 225 La réécriture d'URL native de SPIP sans modifier la conf apache 13 octobre 2006
Extra, merci ! N'ayant pas accès à la config Apache (c'est pourquoi je m'étais tourné vers cette page ;-), j'ai modifié comme indiqué le fichier inc-urls-balluche.php3 en plaçant /index.php avant les ? des fonctions 'generer_url'. Un 1er test ça marchait, j'en ai donc profité pour renommer mon fichier index.php avec un mot clé important pour le site et corrigé de nouveau les fonctions generer_url. Tout fonctionne bien merci bcp. JPB
# 336 La réécriture d'URL native de SPIP sans modifier la conf apache 1er avril 2007, par jari

bonjour Merci pour cette contrib. Mais comment faire si l'on veut avoir un critère de langue par ex : article.php ?id_article=xx&lang=fr

J'aimerais avoir lang=fr dans mes URL articles. salutations

Poster un message