8797 sujets

Développement web côté serveur, CMS

Bonjour à toute et à tous,

Je me suis mis dans la tête de réécrire les url d'une page pour apprendre le fonctionnement des url rewriting avant de continuer à développer mon site. Mais depuis 3jours que je lis des sujets à droite à gauche, les explications d'apache, d'ovh,... j'ai l'impression qu'il y a un gros truc qui m'échappe, tellement gros que je ne le vois pas.

J'avoue mon incompétence avec les regex même si j'en comprend bien le principe et les bases.
Donc voila mon problème.

J'aimerais avoir une url du type :
www.monsite.fr/blog/titre-de-mon-article-1
Avec 1 correspondant à l'id de l'article.
et
www.monsite.fr/blog/titre-de-mon-article-1-2
Avec 2 correspondant au numéro de la page.

C'est vraiment pas sorcier ce que je demande, mais il y a un truc vraiment basique qui m'échappe et que je ne trouve nul part.
La forme d'url "propre" doit bien être directement dans mon liens?
Genre : <a href:"../blog/titre-de-mon-article-1"></a>
sachant que le titre de l'article est créer par une variable php et que le numéro de l'article aussi.

Ensuite je suis donc censé faire mon fichier .htaccess avec mes conditions de réécriture.
genre
../blog/titre-de-mon-article-1 deviens ../blog/index.php?id_article=1

ce qui donne "concrètement"


Options +FollowSymlinks
RewriteEngine on

# Règles de réécriture d'URL :
RewriteBase /test/blog/

# Article sans numéro de page :
RewriteRule ^/?(?:[.]*)-([0-9]+)\.html$  /article.php?id_article=$1 [L]


Il parait que le /? après ^est obligatoire chez ovh, pour le reste vous pouvez constatez que je veux récupérer que l'id de l'article étant donné que le titre réécrit pour l'url ne m'intéresse pas. Donc c'est une règle très simple mais je n'y arrive pas Smiley fache
J'ai essayé de plusieurs manière genre encore plus simple tel que :
RewriteRule ^/?([0-9]+)\.html$ /article.php?id_article=$1 [L]
Mais ça ne fonctionne pas et je suis sûr que certain en rigole tellement c'est simple.

Si une bonne âme pouvait me mettre sur la voix de la réussite je serais ravis.
Merci d'avance et désolé pour ce poste complètement débutant mais depuis 3jours que je passe à tester rien ni fait. Smiley bawling
Modifié par Dim (18 Mar 2010 - 11:34)
Salut,

d'après ton RewriteBase je suppose que le .htaccess est placé dans le répertoire blog (à noter qu'une fois en ligne il faudra enlever /test qui doit correspondre à ta racine en local : http://localhost/test/blog/... ).

Alors en fait tu as 2 règles distinctes :
RewriteEngine on 
RewriteBase /test/blog/
RewriteRule ^.*-([0-9]+)-([0-9]+)$  articles.php?id_article=$1&page=$2 [L]
RewriteRule ^.*-([0-9]+)$  articles.php?id_article=$1 [L]
PS :

Dim a écrit :
Il parait que le /? après ^est obligatoire chez ovh
Euh... non ! Mais par contre certains hébergeurs obligent l'ajout du slash dans la redirection :
ce ne sera donc pas articles.php?id_article=$1
mais /articles.php?id_article=$1
(il faut donc tester avec le slash si la première écriture ne fonctionne pas)

Sinon d'une manière générale il faut partir des liens attendus et
^/?(?:[.]*)-([0-9]+)\.html$
ne correspond pas à www.monsite.fr/blog/quelquechose-33 Smiley cligne
Modifié par Heyoan (14 Mar 2010 - 11:55)
Je ne comprends pas bien… Tu pars d'url significatives pour arriver à un système plus classique avec articleid=?

Si tu veux garder les urls signficatives, tu peux récupérer le QUERY_STRING ou le PATH_INFO, et tu analyse l'url pour afficher la bonne page. Dans ta base de données, url = id.

Tu peux avoir un fichier blog.php dans ton dossier Test, ce qui donnerait :

http://localhost/test/blog.php/titre-de-mon-article


Avec multiview activé ça donnerait

http://localhost/test/blog/titre-de-mon-article


Pour la page :

http://localhost/test/blog/titre-de-mon-article/page/2


Je ne suis pas dev, j'espère ne pas avoir dit de bêtises.
Modifié par Patidou (14 Mar 2010 - 12:09)
Merci Heyoan,

Effectivement je savais qu'il fallait faire deux règles mais je n'arrivais déjà pas à en faire une alors pas la peine de faire la deuxième Smiley decu
D'ailleurs pour dire vrai, il n'y en a pas que deux puisque j'ai aussi le système de tag et de catégorie à traiter sous la même forme à une bidouille prêt.

/test correspond plutôt à un sous fichier de mon site, du coup je pense qu'il faut que je le conserve. (J'ai tester et il faut bien que je le conserve)

Par contre, d'après ce que j'ai lu pour ovh, il faut ajouter ^/? mais je viens de tester sans et ça fonctionne... j'ai du lire un truc erroné.

Pour finir, pourquoi ne pas mettre Options +FollowSymlinks ? C'est inutile?

Merci merci merci Heyoan... Mon sauveur PHP Smiley prie
(Je te dédicacerais un remerciement sur mon site si un jour je le fini et je lui donne du contenu, Mais tu n'a pas de site web???)

PS : Je me sent quand même ridicule d'avoir chercher pendant trois jours un truc aussi basique. Je devais pas être dans mes bonnes journées Smiley langue

[EDIT] Oups désolé j'ai pas lu les nouveaux commentaires. Je réédite une fois lu ^^
Modifié par Dim (14 Mar 2010 - 12:11)
Heyoan a écrit :
Sinon d'une manière générale il faut partir des liens attendus et

^/?(?:[.]*)-([0-9]+)\.html$

ne correspond pas à www.monsite.fr/blog/quelquechose-33 cligne

Heuuu je comprend pas ce que tu m'explique.

Il faut pas partir de la forme www.monsite.fr/blog/titre-de-mon-article-1
ou de la forme www.monsite.fr/blog/index.php?titre-de-mon-article$id_article=1
dans la balise a?

Patidou a écrit :
Je ne comprends pas bien… Tu pars d'url significatives pour arriver à un système plus classique avec articleid=?


Bein j'envoie dans l'url via la balise a une url "propre" que ensuite je réécrit via les règles pour pouvoir avoir mon id_article=1 (ou un autre chiffre)
Ensuite dans ma page php je récupère via get mon id et je fais mes requètes.... C'est pas logique ce que je fais?

Patidou a écrit :
Si tu veux garder les urls signficatives, tu peux récupérer le QUERY_STRING ou le PATH_INFO, et tu analyse l'url pour afficher la bonne page. Dans ta base de données, url = id.

Heuuu la je suis trop nul pour comprendre ce que tu me dit... Je vais planché dessus pour comprendre mais je vois pas pour le moment la différence entre ce que je fais et le résultat de ce que tu me propose... Smiley sweatdrop

Cependant, si je pouvais arriver à un système tel que celui que tu me montre :
http://localhost/test/blog/titre-de-mon-article/page/2
Avec des / entre chaque élément ca m'intéresse.

Bon bein j'ai encore du pain sur la planche Smiley ravi
Dim a écrit :
Il faut pas partir de la forme www.monsite.fr/blog/titre-de-mon-article-1
ou de la forme www.monsite.fr/blog/index.php?titre-de-mon-article$id_article=1
dans la balise a?
Les liens doivent être composés avec la forme "esthétique" ( www.monsite.fr/blog/titre-de-mon-article-1 ) qui sera rewritée pour être fonctionnelle ( www.monsite.fr/blog/articles.php?id_article=1 ). Toi dans ta règle tu indiquais que l'url finissait par .html ce qui est faux. Smiley cligne

Dim a écrit :
Cependant, si je pouvais arriver à un système tel que celui que tu me montre :
http://localhost/test/blog/titre-de-mon-article/page/2
Avec des / entre chaque élément ca m'intéresse.
Ce sont les mêmes règles que celles que je t'ai données plus haut en remplaçant les tirets (-) par des slashs (/). Par contre dans ce cas il faudra faire gaffe aux « répertoires virtuels » en utilisant l'élément BASE.
Bonjour (ou bonsoir plutot pour vous),

Heyoan a écrit :
Toi dans ta règle tu indiquais que l'url finissait par .html ce qui est faux. cligne


Effectivement, j'avais pas fait attention Smiley sweatdrop

Heyoan a écrit :
il faudra faire gaffe aux « répertoires virtuels » en utilisant l'élément BASE.


J'avais deja lu le premier lien, je vais mettre ca en oeuvre ce soir et tester. Je reviendrais mettre resolu si j'ai plus de probleme Smiley cligne

Sinon je suis quand meme intrigue par les remarques de Patidou... J'aimerais bien en savoir plus, vous pourriez me faire une petite explication svp.. Smiley biggrin Car j'ai lu ces liens mais heuuu je vois pas l'interet d'un tel systeme.

Merci a vous deux pour votre temps.