Aller au contenu

Réécriture d'URL


Striker

Sujets conseillés

Bonjour,

Je ne cherche pas à faire unr réecriture d'url "typique", pour cela il y a tout ce qu'il faut ici http://www.webmaster-hub.com/publication/article5.html

J'aurais souhaiter avoir des URL plus "mémorisables".

Comme par exemple :

http://openweb.eu.org/articles/initiation_css/

ou

http://www.atelierphp5.com/oser-lutf-8.html

Je suis conscient que c'est une approche différente de l'architecture d'un site. On ne se base plus sur des identifiants tel que :

http://www.mon-site.com/articles/index.php?u=6 qui devient par exemple http://www.mon-site.com/articles/index6.html

Là on travail sur un titre UNIQUE propre à l'article que l'on met en url.

On possède donc un champ "article_url" qui est UNIQUE pour chaque articles.

On aurait donc à la place de http://www.mon-site.com/articles/index6.html

=> http://www.mon-site.com/articles/charlotte-aux-fraises/

où "charlotte-aux-fraises" est ce que contient le champ "article_url" et qui est unique.

On ne peut pas faire cela avec le module Apache mod_rewrite donc on va le faire en PHP...

Et c'est là que je bloque, je suis un peu perdu sur la facon de procéder.

Théoriquement un récupère l'url demander par le client (internaute), on la décortique pour éviter tout problème de sécurité et on fait une requete sur la BDD pour trouver à quel article correspond "charlotte-aux-fraises", on recupère son id et on l'affiche.

Par contre la mise en pratique de tout cela dans le code, je suis un peu perdu... :blush:

Chose importante, que l'ont tape en url http://www.mon-site.com/articles/charlotte-aux-fraises ou http://www.mon-site.com/articles/charlotte-aux-fraises/ on tombe sur la même page et non une erreur 404 pour le premier cas :)

Si vous pouviez me donner quelques pistes pour les choses soient faites correctement,

je vous remercie d'avance :)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour cela, il faudrait que l'on sache comment se trouve la facon de stocker de tes 'vrais' articles, histoire de savoir ce que l'on devra renvoyer.

Ensuite : Les 2 urls renvoient sur la meme page. Tu sais laquelle ? Toutes les urls renvoient vers cette page, actuellement ?

Enfin, comment le faire ? En php ? ou mysql ? Tu peux le faire en php, s'il n'y en a pas beaucoup, et si tu n'as pas envie d'utiliser la base de données pour cela. Sinon, si tu as vraiment beaucoup de pages, si tu veux que ce soit vraiment dynamique sans prise de tete (au niveau 'ajouter/modifier/supprimer'), alors mysql serait mieux.

Lien vers le commentaire
Partager sur d’autres sites

Pour cela, il faudrait que l'on sache comment se trouve la facon de stocker de tes 'vrais' articles, histoire de savoir ce que l'on devra renvoyer.

Tous les articles sont stocker dans une BDD.

On travail avec le coupe PHP/MySQL

Ensuite : Les 2 urls renvoient sur la meme page. Tu sais laquelle ? Toutes les urls renvoient vers cette page, actuellement ?

Je voulais dire que l'élément "/" en fin de chaine n'était pas une obligation pour aller chercher dans la BDD les données relatives à l'article.

"/articles/charlotte-aux-fraises/" ou "/articles/charlotte-aux-fraises" afficheront la même page.

"charlotte-aux-fraises" est l'identifiant d'un article et chaque articles possède un identifiant différent.

Je ne sait pas si c'est plus clair là :huh:

Lien vers le commentaire
Partager sur d’autres sites

En fait, il faut que tu ailles dans la table sql, et que tu cherches l'article qui corresponde à ton identifiant :

SELECT article FROM table_article WHERE nom_article='charlotte_aux_fraises'

Lien vers le commentaire
Partager sur d’autres sites

Chose importante, que l'ont tape en url http://www.mon-site.com/articles/charlotte-aux-fraises ou http://www.mon-site.com/articles/charlotte-aux-fraises/ on tombe sur la même page et non une erreur 404 pour le premier cas :)

<{POST_SNAPBACK}>

Bonjour, je débute en expression régulière donc peut être que ce que je dit est faux mais je me lance quand même :/

Pour rediriger tu utilises l'expression:

^articles/(.*)/$

qui est remplacé par la page php:

articles.php?a=$1

Pour rendre le slash optionnel, il suffit de rajouter un "?" derière ce caractère ce qui donne:

^articles/(.*)/?$

Dans ta page php tu devrait alors pouvoir exploiter la valeur fournie:

<?php
if( isset( $_GET['a'] ) )
{
$_GET['a'] = addslashes($_GET['a']); //on ajoute des slash devant les guillemets simples pour éviter une injection sql
$article = mysql_query("SELECT texte FROM table_article WHERE titre = '" . $_GET['a'] . "'");
if(mysql_num_rows($article) != 1)
{
 //l'url est fause et mène vers un article qui n'existe pas
}
else
{
 //l'url est correct et on va afficher la page
}
}
?>

Lien vers le commentaire
Partager sur d’autres sites

J'avoue ne pas trop voir pourquoi on ne peut pas faire ça avec l'url rewriting ?

/machin/truc/

avec l'url rewriting on récupère le mot "truc" et on redirige vers une page genre

article.php?id=truc. Et sur cette page article.php on récupère les infos de la bdd grâce à l'id truc.

Non ?

edit : c'est ce que propose le post au dessus ;)

Modifié par nalrem
Lien vers le commentaire
Partager sur d’autres sites

En fait, si, c'est tout à fait possible de le faire en url_rewriting, c'est la meme démarche qu'avec des identifiants numériques, sauf que ce sont des 'mots' au lieu des 'chiffres'.

Après, il faut savoir que faire de ces identifiants 'string', ces chaines de caractère.

En fait, il faut faire pareil qu'avec un id. numérique, à savoir : aller dans la base de données, et comparer avec les identifiants que l'on a en stocke, et ressortir la page, l'article en question.

Lien vers le commentaire
Partager sur d’autres sites

Je ne veut pas réécrire l'url "/articles/charlotte-aux-fraises/" en "/articles/index.php?u=6"

Toutes les URL du site sont déjà données de la facon suivante : "/articles/article_url/"

Je suis conscient que la requête SQL pour récupérer les données relatives à l'article se fera avec "charlotte-aux-fraises" comme identifiant.

Mon problème vient plutôt de la récupération de l'url avec $_SERVER['PHP_SELF'] et de son formatage pour l'utiliser.

Merci pour vos réponses cela m'a permis d'y voir un peu plus clair :)

Lien vers le commentaire
Partager sur d’autres sites

Dans ce cas, il faut t'intéresser à la variable $_SERVER['PHP_SELF'], que tu passes dans la fonction 'basename', ce qui va t'extraire le nom du fichier courant.

Il y a d'ailleurs plusieurs facons d'extraire le nom du fichier courant, notamment avec le tableau $_SERVER. Fais une boucle dessus, et choisis celle qui te plait ;)

foreach($_SERVER as $k => $v)echo "
".$k."-->".$v;

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Bonjour,

je reprend un vieux topic que j'ai fait car mon problème concerne le même sujet.

Je n'ai plus aucun problème pour récuprer l'URL et la traiter pour aller chercher dans la base de donner le contenu de la rubrique ou de l'article désigner.

Je suis dans le brouillard sur la facon de faire quand on part de l'index du site.

Je vais tacher de m'expliquer car étant un peu perdu a ce niveau j'ai peur de ne pas être tres clair.

Quand on arrive sur l'index du site tous les liens sont déjà écrit sous la bonne forme. C'est à dire : /tartes_au_pommes/ pour aller dans la rubrique tartes aux pommes, /brownies/ pour aller dans la rubrique brownies

Là ou je suis complètement perdu c'est comment gérer ses URL sachant que j'ai un page rubriques.php pour l'affichage des rubriques et articles.php pour l'affichage des articles.

Je sait comment récupérer les données de l'url qui vont m'indiquer quelle est la rubrique et l'article demander mais comment indiquer qu'il faut utiliser la page rubriques.php ou la page articles.php ? ou plutot comment aller dessus ?

L'URL-rewriting via Apache ne fonctionne pas car il considère que /tartes_au_pommes/ est un répertoire physique, alors qu'il n'existe pas sur l'espace d'hébergement.

Merci pour votre aide et en espérant avoir été compréhensible.

Modifié par Striker
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...