Réécrire des URL "a posteriori"

  • Auteur de la discussion Auteur de la discussion OTP
  • Date de début Date de début
WRInaute accro
Bonjour,

J'ai une série de pages www.example.com/nom_de_la_page.php où nom_de_la_page.php est le titre de la page et n'obéit pas à une règle logique.
Je voudrais supprimer toutes ces pages php statiques pour les remplacer par une seule www.example.com/page.php?id=id_page dynamique.

Je sais bien créer une table sql base qui fera les équivalents entre les id_page et les nom_de_la_page, mais quelle règle de réécriture utiliser, et comment faire "causer" ensemble .htaccess et sql ?

Je n'ai aucune idée de comme faire ça, un peu d'aide sera la bienvenue !

Merci d'avance,

Michaël
 
WRInaute passionné
je ne pense pas

tu devrais absolument mettre le id de la page dans ton url, mais tu ne veux pas changer le format (surement pour un problème de netlinking interne e externe) je te comprends

out dépend de la quantité de page (plutôt 20 ou 200000 ?)
 
WRInaute passionné
etape 1 : refait ton site en dynamique avec cette partie sql dont tu as parlés

etape 2 : réécrit les urls avec les idpages dans toutes tes pages

function url($idPage,$titleName=null){
return "page.php?id=$idPage";
}

test que tout marche bien avec ton nouveau site


etape 3 : récupére les noms des titres de tes pages et passe les à ta fonction plus haut, tu peux imaginer un truc dans ce genre là

$isUrlRewriting=true;

function url($idPage,$titleName=null){
global $isUrlRewriting;
if($isUrlRewriting)
return $titleName."-".$idPage.".html";
else
return "page.php?id=$idPage";
}


etape 4 : met en place une régle de rewriting dans ton htcesss qui va te réécrire

[a-zA-Z-]*."-".[0-9]+.".html" vers page.php?id={parametre2}

notes : c'est que du pseudo code, le but est de comprendre comment çà marche pas pas que çà tourne direct...

-------------

EDIT j'avais pas vu les posts entre temps,

si il est possible de ne pas mettre l'idpage dans l'url (c'est ce qui est fait sur spip), tu dois stocker le nom de ta page dans une colonne en plus dans ta table "article" .... mais dans ces cas là c'est peut être plus intelligent de passer à spip tout court

ensuite, tu fais une redirection de toutes tes pages vers un page.php?title= et tu fais une sélection dans la base sur la colonne concerné ...
 
WRInaute accro
Merci Mumuri mais j'ai seulement quelques URL (40 ou 50, pas plus) que je souhaite réécrire. Tout le reste (ou presque) l'es déjà. Ta méthode ne s'appliquera donc pas, si j'ai bien compris.
 
WRInaute passionné
Mumuri a dit:
si il est possible de ne pas mettre l'idpage dans l'url (c'est ce qui est fait sur spip), tu dois stocker le nom de ta page dans une colonne en plus dans ta table "article" .... mais dans ces cas là c'est peut être plus intelligent de passer à spip tout court

+10000
 
WRInaute accro
Visiblement, je vais devoir faire en dynamique les futures URL de cette thématique, et réécrire les anciennes à la main (quitte à virer les moins parcourues).
 
WRInaute passionné
rudddy a dit:
Mumuri a dit:
si il est possible de ne pas mettre l'idpage dans l'url (c'est ce qui est fait sur spip), tu dois stocker le nom de ta page dans une colonne en plus dans ta table "article" .... mais dans ces cas là c'est peut être plus intelligent de passer à spip tout court

+10000

le probléme c'est que son pattern doit pas être en conflit avec ces urls déjà rewrité, à la limite si tu as déjà un id dans tout tes autres urls rewrité, çà peut passer un truc [a-zA-Z-]*\.php
 
WRInaute accro
Tu peux parfaitement faire une seule ligne dans ton htaccess

Etape 1 : tu fais une base de données avec la correspondance id - nom de page statique (en gardant la même)

Etape 2 : tu fais un url rewriting sur la base du nom de la page que tu récupères en paramètres (get)

Etape 3 : à l'intérieur de ta page index, tu interroges ta table de l'étape 1, et tu sors la correspondance entre id et nom

Evidemment, si c'est du fait maison, on peux simplifier en donnant pour id le nom de la page.

Ainsi, pour une page eolienne-beaufort.html

ta rewrite rule sera
Code:
RewriteRule ^([a-zA-Z-]+)\.html$ /index.php?name=$1 [L]

Tu as donc le nom en parametre, donc ton index sera appelé page.php?name=eolienne-beaufort

Ensuite dans ton index php tu appelles ton id.

Tu conserves tes urls d'origine avec ce système.
 
WRInaute accro
Ok, j'ai lu la fin !
Je vais voir ça.

Je pensais qu'il y avait des moyen de faire simplement cohabiter .htaccess et sql ; je me suis donc trompé ?
 
WRInaute accro
Mais c'est simple ;)

Sinon cela dépend de la config de ton serveur, il est possible de faire ça directement dans le .htaccess
 
Discussions similaires
Haut