URL rewriting & BDD

Nouveau WRInaute
Bonjour, je souhaite mettre en place sur mon site un url rewriting un peu spécial peut-etre ? Et je ne sais pas vraiment si c'est possible.

J'ai donc une BDD contenant mes articles ex :
ID=7
TITLE=MOTS CLEFS
P=Blablablablablablablablabl
URL=mots_clefs.php
...

L'url des mes articles est pour le moment : www.monsite.com/article.php?ID=7

Je voudrais les rewrinter en www.monsite.com/mots_clefs.php

suivant les variables enregistrées dans ma BDD. Est-ce possible ?

Merci d'avance
 
WRInaute passionné
Bien sur que c'est possible.
1/ il faut que le champ TITLE soit unique
2/ tu va chercher le titre, tu lui applique une fonction qui transforme les mots clé en ton url
3/ tu crée le lien

pour récupérer la cible, tu sélectionne l'ensemble des "title" de ta base, et tu applique la même fonction que tu compare à ton url.

C'est un peu lourd, mais ça marche.
 
Nouveau WRInaute
J'ai deja mon champs unique "URL" dans ma BDD pour chacun de mes articles.

Maintenant quelle fonction utiliser dans mon htaccess ?

Cela devrai donner quelque chose dans ce goût là :
RewriteEngine on
RewriteRule $URL.php$ article.php?ID=$ID [L]
 
WRInaute passionné
ok, tu as un champ URL dans ta base.

Sinon c'est pas si simple que celà !
Si tu veux que l'url ne contienne que les mots clé, il faut un .htaccess pour faire pointer vers la page articles, et dans la page articles, tu selectionne l'article pas sur son ID mais sur le champ MOTCLE

Le problème avec des url du type -www.monsite.com/mots_clefs.php c'est que si tu as un fichier du genre -www.monsite.com/contact.php, le .htaccess va te le rediriger vers la page articles.php...

je prendrais plutôt des url du type -www.monsite.com/articles/mots_clefs.php ou mieux encore : -www.monsite.com/articles/mots_clefs (pas besoin de l'extension ".php")

le Rewrite rule serait
Code:
RewriteRule ^articles/(.*)$ article.php?motcle=$1 [L]

et dansla page article.php, tu aurait la variable $_GET['motcle'] de disponible, et il te suffirait de faire un

Code:
SELECT *
FROM articles
WHERE motcle=$_GET['motcle']

pour récupérer l'article dans la base
 
WRInaute accro
et pourquoi pas :
example.com/$id,$mot_clé.html ? tu te facilite la vie en faisant ça (ce que quasiment tout le monde fait) comme ça tu as ta clé et tes mots clés dans l'url
 
WRInaute passionné
ok. j'imagine que le BDD est une constante sur toutes les pages ?

donne moi *exactement* un exemple de page, et un exemple de mot clé contenu dans le champ MOTCLE de la bdd
 
WRInaute passionné
e-kiwi a dit:
et pourquoi pas :
example.com/$id,$mot_clé.html ? tu te facilite la vie en faisant ça (ce que quasiment tout le monde fait) comme ça tu as ta clé et tes mots clés dans l'url
pourquoi faire vilain quand on peut faire beau
-http://www.skitour.fr/matos/ :wink:
 
Nouveau WRInaute
En fait j'ai déjà prevu un champs unique URL dans ma BDD. Exemple :

ID=7
URL=sac_graines_cafe.php
TITLE=Sacs à graines de café - 10 Kg

ID=9
URL=sac_riz.php
TITLE=Sacs de Riz Long - 10 Kg

Mes articles sont appelés dynamiquement dans ma page article.php par le biais de la variable ID : article.php?ID=9
 
WRInaute passionné
ça va poser un problème : toutes les pages de ton site qui porteront .php comme extension seront redirigées vers article.php

M'enfin

ton .htaccess :
Code:
RewriteRule ^(.*\.php)$ article.php?motcle=$1 [L]

et dans article.php

Code:
SELECT *
FROM articles
WHERE motcle=$_GET['motcle']
 
Nouveau WRInaute
Et si finalement je part sur la piste du : www.monsite.com/articles/mots_clefs.php, vais-je rencontrer le même type de probleme (je ne souhaite pas modifier les pages de mon forum, mes autres pages php deja presentes à la racine) ? Comment vais-je faire faire pour rediriger les moteurs sur ces nouvelles pages depuis les anciennes ? Cela ne vapas faire doublon, je ne risque pas d'avoir de petits soucis avec google ou autre ?
 
WRInaute passionné
C'est mieux.

Ton .htaccess va devenir
Code:
RewriteRule ^articles/(.*\.php)$ article.php?motcle=$1 [L]

Attention a tes tes liens en relatif qui risquent d'être brisés vu que ta page et l'url ne sont pas dans le même répertoire. tu peux utiliser la balise <base href="">

Pour rediriger les anciennes pages vers les nouvelles, au début du fichier article.php tu mets :

Code:
if (!strstr($_SERVER['URI_REQUEST'], 'articles/')
{
header ('HTTP/1.1 301 Moved Permanently');
header("Location: http://www.tondomaine.tld/articles/".$_GET['motcle']);
exit();
}

(ça doit être ça, pas testé)

ce qui aura pour effet de rediriger les anciennes url (sans "articles/") vers les nouvelles.
 
WRInaute passionné
très bien aussi, mais tu ajoute un séparateur à ton url et certains moteurs n'aiment pas en voir trop.
 
Nouveau WRInaute
Merci Jeroen, je vais partir sur cette formule, je vais donc devoir rediriger les moteurs, en leur signalant ce changement d'url pour mes pages deja référencées. Dois-je placer un script de redirection sur chacune d'entre elles ? Sachant que mes pages deja existantes ont la meme url sans le mot "art-".

ex page existante : www.monsite.com/mots1_clefs1.php
devient : www.monsite.com/art-mots1_clefs1.php

Ou peut etre puis-je placer un script generaliste qq part ?
 
WRInaute passionné
Tu peux aussi rediriger ces pages par .htaccess, une regle, une page

Code:
Rewriterule anciennepage nouvellepage [L, R=301]
 
Discussions similaires
Haut