Aller au contenu

$_GET['var'] et Rewrite Rule


Sujets conseillés

Posté (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 on

RewriteRule ^([^<>]*)/([^<>]*)/$ ?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é par ElMoustiko
Posté

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.

Posté

avec le slash de début oui, ca fait pareil

En enlevant l'exclusion, euh je dois mettre quoi à la place ?

RewriteEngine on

RewriteRule ^([]*)/([]*)/$ ?cat=$1&tut=$2

??? ou

RewriteEngine on

RewriteRule ^$1/$2/$ ?cat=$1&tut=$2

Ou autre chose ????

Posté

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.

Posté

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 ;)

Posté

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.

Posté

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 :blush:

Posté

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.

Posté

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 ???

Posté

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 on

RewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2

RewriteRule ^([^<>]*)/$ ?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...

Posté

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 on

RewriteRule ^([^<>]*)/ext/([^<>]*)/$ ?cat=$1&ext=$2

RewriteRule ^([^<>]*)/([^<>]*)/$ ?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...

Posté

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.

Posté

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 on

RewriteRule ^([^<>]*)/ext/([^<>]*)/$ ?cat=$1&ext=$2 [L]

RewriteRule ^([^<>]*)/([^<>]*)/$ ?cat=$1&tut=$2 [L]

RewriteRule ^([^<>]*)/$ ?page=$1

ErrorDocument 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...

Veuillez vous connecter pour commenter

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



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