ElMoustiko Posté 14 Octobre 2004 Posté 14 Octobre 2004 (modifié) J'ai un petit soucis de réécriture d'url et d'utilisation de la variable $_GET J'ai une règle de réécriture de cette forme : RewriteEngine onRewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2 Donc nom1/nom2/ renverra à ?cat=nom1&tut=nom2 Donc je devrais pouvoir avoir accès à $_GET['cat'] et à $_GET['tut'] en principe, or ca ne fonctionne pas... Par contre si je met directement ?cat=nom1&tut=nom2, là j'y ai accès. Donc il y a une problème au niveau de ma réécriture d'url à priori. Le problème, c'est qu'elle parait bonne puisque /nom1/nom2/ ne me renvoi pas à une erreur 404, mais à /?cat=nom1&tut=2 ... Je ne comprend pas vraiment où est l'erreur, si vous aviez une idée... merci Modifié 14 Octobre 2004 par ElMoustiko
ElMoustiko Posté 14 Octobre 2004 Auteur Posté 14 Octobre 2004 Oui j'avais essayé, j'avais mis ça au départ, mais même problème...
Remi Posté 14 Octobre 2004 Posté 14 Octobre 2004 Et as-tu essayé en: enlevant l'exclusion des crochets ou en rajoutant un slash de début ? Remarque que s'il va sur ta page, cela veut dire que le pattern est bien reconnu.
ElMoustiko Posté 14 Octobre 2004 Auteur Posté 14 Octobre 2004 avec le slash de début oui, ca fait pareil En enlevant l'exclusion, euh je dois mettre quoi à la place ? RewriteEngine onRewriteRule ^([]*)/([]*)/$ ?cat=$1&tut=$2 ??? ou RewriteEngine onRewriteRule ^$1/$2/$ ?cat=$1&tut=$2 Ou autre chose ????
Remi Posté 14 Octobre 2004 Posté 14 Octobre 2004 En enlevant l'exclusion, ça donne RewriteRule ^(.*)/(.*)/$ ?cat=$1&tut=$2 [L] Si ça ne marche pas, c'est qu'il y a une co^H^H euh... quelque chose dans le potage.
Dan Posté 14 Octobre 2004 Posté 14 Octobre 2004 ElMoustiko, Les variables $_GET sont des variables mises par le serveur. En réécrivant l'URL, le $_GET reste tel qu'il était lors de la première analyse de l'URL, et les paramètres de la réécriture n'y sont pas injectés, à mon avis. Je ferai toutefois des essais demain pour valider cela. En attendant, tu peux y accéder simplement par les variables $cat et $tut
Anonymus Posté 15 Octobre 2004 Posté 15 Octobre 2004 Bonjour, Tu peux avoir accès aux variables $_GET, $_POST (pourquoi pas ?), mais aussi $GLOBALS, et bien d'autres. Tu verrais ainsi si ton programme a accès à ce genre de données. Peut etre que le fichier cible n'est pas le bon. Peut etre qu'il renvoie bien les données, mais dans un autre fichier, que tu n'ouvres pas... Quel est le nom du fichier où tu récupères ces données ? Tu devrais aussi jeter un oeil aux variables du serveur, qui sont accessibles avec $_SERVER. Cela te donne donc le test suivant (pour la variable GLOBALS) : echo"<p><b>Variable GLOBALS</b>";foreach($GLOBALS as $k => $v) if (!is_array($v)) echo"<br>".$k."--->> ".$v; else foreach($v as $k2 => $v2)echo "<br>['$k'] -----------".$v2; Avec ca, tu devrais trouver A.
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 En fait, si je met mon url non réécrite donc: /?cat=categorie&tut=tutoriel mon script fonctionne, et je suis content, par contre, si je met l'url réécrite, /categorie/tutoriel/ et ben là ca ne fonctionne plus... Donc c'est au niveau de la réécriture que je dois avoir un problème a priori... Je testerais avec le code de Remi : RewriteRule ^(.*)/(.*)/$ ?cat=$1&tut=$2 [L] Mais cet aprés midi, j'ai pas le temps ce matin pour vous dire si ca fonctionne. Je suis un vrai pied avec les réécritures
Anonymus Posté 15 Octobre 2004 Posté 15 Octobre 2004 Oui, mais... quel script ? Quel est le nom de la page qui marche ? /?cat=categorie&tut=tutoriel n'est pas un nom de page, c'est ce qui est envoyé après le nom de la page. Là, ca devrait renvoyer sur la page index.php, mais à condition que tu en aies une, et que tu n'ais pas de index.html. Si ca marche sans la réécriture, mais sur un fichier qui s'appelle 'test.php', et que tu testes la réécriture, il faut que tu récupère les données dans le fichier index.php, ou que tu rediriges vers le fichier test.php. C'est au niveau du nom du fichier qu'il peut y avoir des problèmes, pas forcément au niveau de la réécriture. Or tu ne nous as toujours pas parlé de ces noms de fichier. A.
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 Bah nom de fichier, c'est bien simple, il n'y en a qu'un et c'est index.php Et dans mon index.php je récupère les valeur de cat et de tut, avec /index.php?cat=...&tut=... ca fonctionne et ca equivaut à /?cat=...&tut=... Ces 2 url sont equivalentes puisque je n'ai qu'un seul fichier et c'est index.php, je dois le préciser dans la règle de réécriture ???
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 J'ai fait quelques essais avec ce que vous m'indiquiez mais non, rien de mieux... Ce qui est bizar, c'est que si la règle de réécriture ne fonctionnait pas, j'aurais une erreur 404, et pourtant j'ai ma page qui s'affiche, mais c'est la page d'accueil et non la page voulue... if((isset($_GET['cat'])) && (isset($_GET['tut']))) { include("includes/tutoriel.php"); } else { include("includes/accueil.php"); } RewriteEngine onRewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2RewriteRule ^([^<>]*)/$ ?page=$1 Avec cette url : domaine/tutoriels/ => c'est l'include accueil.php qui s'affiche avec celle ci : domaine/tutoriels/php/pseudo_frames/ => c'est l'include accueil.php aussi qui s'affiche alors que je devrais avoir l'include tutoriel.php puisque d'après ma règle de réécriture, $_GET['cat'] et $_GET['tut'] sont définies... Voilà si vous avez une idée...
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 Bon, ça fonctionne, j'ai pas tellement compris pourquoi, m'enfin bon, tant que ça marche... Enfin le code je comprend pourquoi il marche mais je comprend pas pourquoi il marchait pas avant... Par contre, là j'ai un souvis au niveu des règles de réécriture : pour mes extensions, je fais des urls du type domaine/tutoriels/php/ext/nom_ext/ Avec php renvoyant au $_GET['cat'] de tout à l'heure, et nom_ext renvoyant à $_GET['ext'] qui remplace $_GET['tut'] pour les extensions. Et je met /ext/ pour différencier extension de tutoriel pour mes inclusions Donc je fais : RewriteEngine onRewriteRule ^([^<>]*)/ext/([^<>]*)/$ ?cat=$1&ext=$2RewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2 Mais $_GET['cat'] me renvoi ici "/ext" alors qu'il devrait renvoyer php (dans l'exemple). Si vous pouviez m'eclairer...
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 Bon ca fonctionne, il fallait simplement ajouter [L] en bout de ligne Je ne me souviens plus de ce que ca fait (je vais aller voir sur les articles du HUB) mais ca marche ! @++ et merci d'avoir porté votre attention sur mon problème.
ElMoustiko Posté 15 Octobre 2004 Auteur Posté 15 Octobre 2004 Encore moi, tant que j'y suis avec mes htaccess, j'ai encore une question : C'est pour ma page d'erreur 404 cette fois ci : RewriteEngine onRewriteRule ^([^<>]*)/ext/([^<>]*)/$ ?cat=$1&ext=$2 [L]RewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2 [L]RewriteRule ^([^<>]*)/$ ?page=$1ErrorDocument 404 /tutoriels/version_dynamique/erreur404/ Donc avec ceci ça fonctionne impec, mais j'aimerais mettre autre chose que /tutoriels/version_dynamique/ en fait, je voudrais mettre en quelque sorte le chemin depuis la racine jusqu'a l'endroit où je suis... je sais pas si je suis très clair... Tous mes fichiers sont dans /tutoriels/version_dynamique/ mais en ligne, il seront dans /tutoriels/ parceque je n'aurais pas de dossier à l'intérieur de celui ci, donc je voudrais automatiser ceci... Je n'ai toujours pas l'impression d'être clair, mais peut etre que quelqu'un me comprendras...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant