Question sur URL Rewriting

Eléphant du PHP | 418 Messages

24 janv. 2012, 09:01

Salutation à vous

J'aimerais savoir comment faire passer des valeur GET via URL Rewriting.

Je m'explique:

Je suis en train de créer un forum , et je souhaite utiliser l'URL Rewriting

Actuellement, j'ai déjà un bout de code dans mon .htaccess, qui me permet de faire index.php?p=lapage en /lapage

Maintenant, pour un forum, on a souvent besoin de passer d'autre valeur en GET, comme par exemple l'id d'un forum.

Je me vois mal avoir http://NOM_DU_SITE/lapage?f=(id)

J'aimerais avoir un truc du genre http://NOM_DU_SITE/lapage-(id) ou http://NOM_DU_SITE/lapage/(id)

Je sais pas sur que ça soit bien évident pour vous de comprendre ce que je souhaite, ...

Sachant que j'ai pas encore définit toutes les GET à passer dans l'URL, vu que je souhaite créer directement l'URL en Rewriting, et que parmis ses GET, il y auras les pages du système de pagination qui actuellement passe par un GET['p'] et que entre nous, je comprend encore rien au .htaccess et URL rewriting, mais bon c'est l’occasion d'apprendre.

Ah oui, j'ai déjà vu pas mal de tutoriel sur ce sujet, mais j'ai rien compris, d'où la demande d'aide ici :oops:

Voici le code de mon .htaccess

Code : Tout sélectionner

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
Merci de votre aide

Cordialement

Ps: j'ai mit ce topic dans php, car je l’utilise directement avec, vu que je vais pas faire un forum entier en html ^^, et que je ne savais pas trop où le poster mise à part ici.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 janv. 2012, 16:34

salut,

décortiquons ta règle de réécriture :

RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
RewriteRule : indique que c'est une règle de réécriture :)
^(.*)$ : expression régulière qui va déclencher la règle (dès que le masque est satiffait on l'utilise
index.php?p=$1 : le chemin de remplacement (c'est ce que tu aurais mis dans l'url) le $1 représente la 1ère parenthèse capturante.

donc cette régle prend tout et le met derrière le p (pour simplifier ;) ).

prenons l'exemple de l'url du ce sujet : php-debutant/question-sur-url-rewriting-t262306.html
php-debutant : nom du forum
question-sur-url-rewriting- ; le sujet du message
262306 : l'id du sujet dans la base
.html : heu pour faire beau
[QSA,L] : des flags pour le serveur, la je t'invite à regarde la doc d'apache sur le sujet pour plus d'info (j'vais pas tout faire :) )


ici le titre du sujet est purement cosmétique et ergonomique (l'url est parlante, et je crois pratique pour les moteurs de recherche).

la règle de réécriture pourrait être (en simplifiant);
^([a-z\-]+)/([a-zA-Z0-9\-]+)t([0-9]+).html$ index.php?forum=$1&sujet=$3

bon c'est a la louche mais c'est l'exemple.
le $1 c'est le nom du forum, le 3 l'id

donc dans ton cas
http://NOM_DU_SITE/lapage/id

peux donner
^([a-z\-]+)/([0-9]+)$ index.php?page=$1&id=2

pour après les flags te permet, ou pas d'ajouter le reste de l'url, donc site/page?id=412 est équivalent à site/page/412

la doc d'apache c'est sur apache.org (rubrique httpd, puis dans les tuto ré écriture d'url).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

24 janv. 2012, 17:06

Ok je cerne un peu mieux le truc.

Question:

J'aurais au final plusieurs GET à faire passer en url et pas forcement l'ID.

Comment pourrais je définir plusieurs possibilités?

J'ai tester ce que tu ma montrer, je récupère bien le GET dans une page donnée pas exemple " SITE/connexion/3 ", j'ai bien l'id qui correspond à 3.

Maintenant, imagine j'ai plusieurs cas de figures différents, comme par exemple SITE?r=lire&titre=le_titre ou SITE?r=repondre$id=ID&titre=le_titre ...

Comment je pourrais faire des ses cas là, pour lui indiquer toutes les possibilités qu'il peux prendre?

Merci de ton aide en tous cas, j'ai déjà mieux compris le principe, et ça, ça fait du bien ^^.

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 janv. 2012, 18:34

Le truc à comprendre c'est que tu peux mettre plusieurs règle d'écriture à la suite les une des autres (pour reprendre l'e exemple de phpfrance il doit y en avoir pas mal (au moins deux pour le forum quand tu affiche la liste des forums d'une catégorie c'est la meme pour un forum. Une règle pour les sujets, une règle pour le détails d'un membre ....)
Il te faut donc traiter tout les cas que tu souhaite voir "rewriter".

Pour cela commence par écrire des exemples des URL que tu veux obtenir (comme tu l'a fait au dessus). Après il reste à créer les motifs des expression régulières qui leur correspondent.
Tu peux, pour cela t'aider de mes exemple et consulter http://www.expreg.com pour tout ce qui est expressions régulières (ce n'est pas du temps perdu c'est utilisable aussi dans php ou Javascript, pour ne citer qu'eux, mais ça ne ce limite pas a ces deux langages ;) )

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

24 janv. 2012, 21:24

Justement, c'est au niveau des déclarations des règles d'écritures.

Y a t'il une manière de faire, ou je met simplement (pour l'exemple)

Code : Tout sélectionner

RewriteRule ^(.*).html$ index.php?p=$1 [QSA,L] RewriteRule ^(.*).html$ index.php?r=$1 [QSA,L] RewriteRule ^(.*).html$ index.php?t=$1 [QSA,L] RewriteRule ^(.*).html$ index.php?y=$1 [QSA,L] ....
Merci pour le tuto sur les expressions régulière, je galère un peu moins depuis que j'ai dû faire une validation de formulaire en JS et php ^^, de toute manière ça serviras pour d'autres ^^

Merci de ton aide

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 janv. 2012, 10:54

ben la les quatre règles sont identiques ......

faut les différencier y a pas le choix.

d'ailleurs tes paramètre d'url sont pas super parlant ;)

RewriteRule ^page/(.*).html$ index.php?p=$1 [QSA,L]
RewriteRule ^resultats/(.*).html$ index.php?r=$1 [QSA,L]
RewriteRule ^toto/(.*).html$ index.php?t=$1 [QSA,L]
RewriteRule ^yop/(.*).html$ index.php?y=$1 [QSA,L]

par exemple

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

26 janv. 2012, 10:16

Eu je vais faire mes url au complet sans rewriting, ensuite j’essaierais de faire les rewriting, et je demanderais vérification ici au cas où.

Merci en tout cas

@++