URL REWRITING

Eléphanteau du PHP | 17 Messages

07 août 2009, 12:40

Bonjour

Voilà je me met à l'URL REWRITING et j'ai chercher pas mal de tuto et j'avoue que je n'y comprend pas tout.

Alors au début j'avais une page dynamic appelé go.php qui évidement ne changeait jamais d'adresse => On pouvait cliquer sur n'importe quel catalogue c'était toujours go.php mais sa chargeait bien les catalogue (merci HEADER).

Donc par la suite j'ai fait un window.location qui prenait le nom du catalogue + id de l'image (il marche) et j'obtiens donc cela :

var Chaine = String(window.location);
var sous_chaine = "#?Client=";
var Resultat = Chaine.indexOf(sous_chaine);
var Resultat2 = Chaine.substring(0,Resultat);
window.location = Resultat2 + "#?Client=" + document.getElementById("title" ).value + "&id=" + document.getElementById("MediaID" ).value;

qui me donne => http://monsite.com/go.php#?Client= [...] ss&id=1563

Par la suite j'ai tenté de faire un .htaccess qui me donne cela :

RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------
RewriteBase /verif/
# Article sans numéro de page :
#RewriteRule ^#/go-(.+)-([0-9]+)\.html$ ^go.php?Catalogue=$1&Photo=$2# [L]
RewriteRule ^go-(.+)-([0-9]+)\.html$ go.php#?Client=$1#&id=$2/ [L]

qui me permet de rentrer directement l'adresse comme ça

http://site.fr/verif/go-Kate Moss-1563.html

Donc si je la rentre comme ça elle marche mais pas super.

1) toujorus le window location à la suite => http://site.fr/verif/go-Kate%20Mos [...] ss&id=1563
2)L'url ne change pas du tout => http://site.fr/verif/go-Kate%20Mos [...] ue&id=1636
3)Donc quand on change les valeur directement dans l'url que ce soit pour le window.location ou avec l'html il ne se passe rien
4)On ne peux pas sauvegarder l'URL sa ne ramène pas sur l'image mais le catalogue pas de retour en arrière.
5) Je ne sais pas comment l'utiliser sans le window.location

Donc si vous pouviez m'apporter quelques explications sur comment l'utiliser je vous en serrais reconnaissant.

Merci

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

07 août 2009, 15:03

Le principe de l'url rewriting, c'est surtout de pouvoir donner des noms clairs et distincts à des pages qui n'en ont pas nécessairement.

En général, tu as un seul script qui ouvre les différentes pages de ton site, les distinguant en fonction des paramètres spécifiés. Par exemple, si j'appelle script.php?id=123 j'arrive sur une page (affichant Kate Moss), tandis que si j'appelle script.php?id=321 j'arrive sur une autre page (affichant... chaispasmoi... Charlize Theron, par exemple :)).

En réalité c'est la même, mais dont le contenu à changé en fonction du paramètre spécifié. Sauf que voir "script.php?id=321" dans une url, ça va pas beaucoup m'avancer (et les moteurs de recherche non plus) pour savoir ce qui se cache derrière. L'intérêt du rewriting, c'est simplement de reformater l'adresse de ces pages avec un nom plus pertinent :)

Il te faut par contre définir des règles de réécriture pour permettre au serveur, lorsqu'on lui demande d'ouvrir la page "charlize-321.html", d'afficher en réaliter la page "script.php?id=321". Tu ne devrais donc plus avoir besoin de javascript, apache doit se charger de la transformation de l'url saisie pour afficher l'url réelle.

Les questions à te poser sont donc :
- quelle est l'url que doit saisir l'utilisateur ?
- quelle est l'url où se trouve mon contenu ?
- comment passer de l'un à l'autre ?

Et il ne te restera plus qu'à écrire les règles de réécriture pour qu'apache fasse le lien entre les deux, sans nécessiter de header() php ou de location javascript :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

07 août 2009, 15:28

Merci tout d'abord de ta réponse

Le problème c'est que mon URL de départ à toujours été site.fr/go.php même en changeant de catalogue car en fait il faisait toujours des header en php et donc l'url ne changeait pas.
C'est moi grace à un windows location qui lui ai donné sa nouvelle tête d'url

Site.fr/go.php#?Client=toto&id=1234

Mais bon voilà quand on écrit dans cette url qu'on change l'ID sa ne change rien du tout. Et c'est pour sa que je bloque, je ne suis pas partit d'une URL de départ avec cette forme là, c'est moi qui l'ai crée.

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

07 août 2009, 15:35

Y a peut être un petit soucis de logique dans tout ça alors :)

On va oublié la partie javascript qui n'est à mon avis pas utile (et donc la structure de l'url avec un # devant le ? me parait assez biscornue)

Comment faisais-tu dans ta page site.fr/go.php pour savoir quel catalogue il te fallait ouvrir ? quelles informations étaient passées à ton script (et comment) pour qu'il ouvre le bon catalogue ? Etait-ce des données en POST ? une variable de session ? ... bref, qu'est ce qui les distinguait ?

L'idée étant de continuer à les distinguer en modifiant ton code pour que cette distinction puisse provenir de l'url :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

07 août 2009, 15:46

Alors en fait j'ai une fonction go.php(contenu à ma racine) qui va agir sur tout.

Elle va appelé une fonction javascript qui va géré en appelant une page php appelé ct_imageList.php(contenu dans /content/).

Cette fonction PHP elle va permettre l'affichage de toutes les images mais elel va appelé pleins de fonctions javascript pour le faire et gérer plein d'autres choses. (A ba e code est pas de moi j'ai juste taffer dessus).

Donc en fait tout est géré depuis Go.php qui va appeler tout ça.... Et c'est là ou est la merdouille

Eléphanteau du PHP | 17 Messages

07 août 2009, 16:00

Cela vient du fait que le site est dynamique en fait.

Et donc il prend une page go.php qui va en appelant du javascript géré tout le reste.. Fin je pense

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

07 août 2009, 16:37

Ca m'a l'air un peu compliqué cette histoire, mais ça devrait pas être génant en soi :)

Cela signifie juste qu'actuellement ton go.php est la page d'entrée et que c'est elle qui (curieusement) a base de js va afficher les pages du site. Jusque là, pas de soucis. Le fait est que pour ouvrir les bonnes images et appeller les bons javascript d'une galerie à l'autre, ta page go.php doit recevoir des paramètres, d'une manière ou d'une autre (ou alors t'aurais également des frames ou des iframes ?)

Il faut donc identifier quels sont ces paramètres qui lui permettent de distinguer deux galeries, de façon à pouvoir continuer à les lui passer via l'url et ainsi permettre à apache de le faire lui même :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

07 août 2009, 16:47

Hum.;. je vais essayer de voir ça.

Tu avais d'abord raison pour les # qui ne sont pas beaux mais le problème c'est que si jes les enlèves ma page se recharge tout le temps (comme une boucle infinie), tu connaitrais pas une astuce pour dire bon tu vois un "?" tu recharge pas. ?

Alors après une rererererevision du code lol =>

1) j'y pige toujours autant rien lol
2) Mon menu pour appeler les catalogue n'est pas contenu dans go.php, de même pour les images(mais sa je le savais).
3)Toutes les images sont dans un dossier et les liens dans des bases de données (leurs ID, leurs titre....) (sa aussi je le savais).
4) je sens que je vais kiffer faire l'url rewritting ^^. En tout cas avec mes #(que je ne veux plus pitiééé) j'arrive avec un $_GET a envoyé les donnée récupéré a mon go.php = Hallelujah je suis sur la bonne voie?

Eléphanteau du PHP | 17 Messages

07 août 2009, 17:28

Je viens d'avoir une idée.....

Aide moi à enlever les # sans que cela fasse une boucle infinie...

Bref je vais stocker apres les $_GET dans une base de données pour pouvoir les utiliser par la suite tu crois que c'est une bonne idée?