Rewriting Rule sur paramètres GET
Fermé
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
-
15 nov. 2011 à 21:05
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 - 29 nov. 2011 à 08:07
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 - 29 nov. 2011 à 08:07
A voir également:
- Rewriting Rule sur paramètres GET
- Ouvrir paramètres - Guide
- Get data back - Télécharger - Récupération de données
- Paramètres de confidentialité - Guide
- Paramètres dns - Guide
- Get get get get down année 80 ✓ - Forum Musique / Radio / Clip
5 réponses
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
18 nov. 2011 à 11:38
18 nov. 2011 à 11:38
Un petit up pour ne pas sombrer dans l'oubli
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
18 nov. 2011 à 14:22
18 nov. 2011 à 14:22
bonjour,
voici une piste
fichier htaccess :
finchier index.php
$get sera un tableau des paramètres passés - separés par des slash dans l'url
----------------------
par contre, la réécriture d'URL avec des slash comporte des soucis, au niveau des fichiers css et javascript
voici une solution pour pallier aux problèmes
tu definit le chemin absolu de ta page index.php , puis tu appelles les fichiers js et css avec leur chemin absolu
voici une piste
fichier htaccess :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?get=$1 [L]
finchier index.php
$get = explode('/', $_GET['get']);
$get sera un tableau des paramètres passés - separés par des slash dans l'url
----------------------
par contre, la réécriture d'URL avec des slash comporte des soucis, au niveau des fichiers css et javascript
voici une solution pour pallier aux problèmes
<?php DEFINE ("CHEMIN", substr($_SERVER['PHP_SELF'],0,strrpos($_SERVER['PHP_SELF'], '/'))); ?> <head> <base href="<?php echo CHEMIN;?>"> <link rel="stylesheet" type="text/css" href="<?php echo CHEMIN;?>/style.css" > <script src="<?php echo CHEMIN;?>/script.js" type="text/javascript"></script> </head>
tu definit le chemin absolu de ta page index.php , puis tu appelles les fichiers js et css avec leur chemin absolu
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
18 nov. 2011 à 14:59
18 nov. 2011 à 14:59
Merci de ta réponse,
Le problème reste le même, au lieu d'avoir une url http://anoen.local/foo/ j'ai http://anoen.local/index/action/foo/
J'ai déjà un tableau des valeurs de mes paramètres qui est renvoyé au controller pour le dispatch. En revanche dans la piste que tu donnes je ne vois pas à quoi il sert par la suite.
Ma base url est déjà set également, c'est surtout les rewrite rule dans le htaccess qui me piquent un peu.
Le problème reste le même, au lieu d'avoir une url http://anoen.local/foo/ j'ai http://anoen.local/index/action/foo/
J'ai déjà un tableau des valeurs de mes paramètres qui est renvoyé au controller pour le dispatch. En revanche dans la piste que tu donnes je ne vois pas à quoi il sert par la suite.
Ma base url est déjà set également, c'est surtout les rewrite rule dans le htaccess qui me piquent un peu.
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
18 nov. 2011 à 16:12
18 nov. 2011 à 16:12
en faisant :
çà fonctionnera
concernant les rewriteCond, je vais t'éclairer
RewriteCond %{REQUEST_FILENAME} !-f
cette ligne signifie pas de règle si c'est un fichier
RewriteCond %{REQUEST_FILENAME} !-d
cette ligne signifie pas de règle si c'est un directory
$get = explode('/', $_GET['get']); $action = $get[0];
çà fonctionnera
concernant les rewriteCond, je vais t'éclairer
RewriteCond %{REQUEST_FILENAME} !-f
cette ligne signifie pas de règle si c'est un fichier
RewriteCond %{REQUEST_FILENAME} !-d
cette ligne signifie pas de règle si c'est un directory
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
18 nov. 2011 à 16:49
18 nov. 2011 à 16:49
Je suis encore plus perdue avec ce $get.
Mon arborescence est construite autour de mon controller et pas autour des dossiers physiques. J'ai donc :
index.php => appelle le MainController.php
MainController.php => demande s'il y a des paramètres dans l'url à URLData.php
MainController.php => Appelle le bon template en fonction de ce qu'il trouve dans $_GET['action'] (chez moi $action = $_GET['action'] en très simple)
Rien de compliqué quoi. Donc tout s'articule autour d'une url type http://anoen.local/index.php?action=foo
Là où je ne te suis pas c'est qu'on dégage des / qui n'existeront jamais dans $action (ou même dans $get ou $_GET['get']) et on l'assigne à $action qui contient déjà tout ce que je récupère en $_GET.
Les RewriteCond sont ok dans ma tête, la logique et syntaxe des Rewrite Rules en revanche... besoin d'aide pour ça.
Bref, tout ça pour dire que ça me génère toujours une url http://anoen.local/index/action/foo/
Mon arborescence est construite autour de mon controller et pas autour des dossiers physiques. J'ai donc :
index.php => appelle le MainController.php
MainController.php => demande s'il y a des paramètres dans l'url à URLData.php
MainController.php => Appelle le bon template en fonction de ce qu'il trouve dans $_GET['action'] (chez moi $action = $_GET['action'] en très simple)
Rien de compliqué quoi. Donc tout s'articule autour d'une url type http://anoen.local/index.php?action=foo
Là où je ne te suis pas c'est qu'on dégage des / qui n'existeront jamais dans $action (ou même dans $get ou $_GET['get']) et on l'assigne à $action qui contient déjà tout ce que je récupère en $_GET.
Les RewriteCond sont ok dans ma tête, la logique et syntaxe des Rewrite Rules en revanche... besoin d'aide pour ça.
Bref, tout ça pour dire que ça me génère toujours une url http://anoen.local/index/action/foo/
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
Modifié par maka54 le 18/11/2011 à 17:17
Modifié par maka54 le 18/11/2011 à 17:17
l'exemple que je te donne te permet de mettre autant de parametres que tu souhaite, autrement dis autant de $_GET['..'];
apparement çà te plait pas, je vais te donner une autre solution en t'expliquant pourquoi elle n'est pas bonne
cette règle te permet de récupérer ton $_GEt['action']
maintenant si tu veux faire de l'url rewriting, tu n'auras pas toujours qu' un seul paramètre, donc cette solution ne marchera plus
pour aller plus loin, je vais te montrer un exempe
en rewriting cela donnerais
et ton url réécrite donneras
çà marchera très bien
maintenant, tu veux faire pareil avec forum puis catégorie puis ...,
tu vas écrire autant de RewriteRule que de type d'url dans ton projet
à la longue, çà sera plutot casse-c....
je remet la solution que je t'ai proposé :
Avec ce code, tu passeras n'importe quelle URL que tu souhaites, avec n'importe quel parametres
Charge à ton MainController.php de faire le boulot
au lieu de faire $_GEt['action'], tu feras $get[0]
si tu passes d'autre infos ce sera
$get[1]
$get[2]
...
apparement çà te plait pas, je vais te donner une autre solution en t'expliquant pourquoi elle n'est pas bonne
RewriteRule ^([a-z]+)$ index.php?action=$1 [L]
cette règle te permet de récupérer ton $_GEt['action']
maintenant si tu veux faire de l'url rewriting, tu n'auras pas toujours qu' un seul paramètre, donc cette solution ne marchera plus
pour aller plus loin, je vais te montrer un exempe
index.php?action=article&id=124&page=2
en rewriting cela donnerais
RewriteRule ^([a-z]+)/?([0-9]*)/?([0-9]*)$ index.php?action=$1&id=$2&page=$3 [L]
et ton url réécrite donneras
http://exemple.net/article/124/2
çà marchera très bien
maintenant, tu veux faire pareil avec forum puis catégorie puis ...,
tu vas écrire autant de RewriteRule que de type d'url dans ton projet
à la longue, çà sera plutot casse-c....
je remet la solution que je t'ai proposé :
fichier htaccess : RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?get=$1 [L] finchier index.php $get = explode('/', $_GET['get']);
Avec ce code, tu passeras n'importe quelle URL que tu souhaites, avec n'importe quel parametres
Charge à ton MainController.php de faire le boulot
au lieu de faire $_GEt['action'], tu feras $get[0]
si tu passes d'autre infos ce sera
$get[1]
$get[2]
...
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
18 nov. 2011 à 17:42
18 nov. 2011 à 17:42
Je me répète, avec ta solution j'ai cette url: http://anoen.local/index/action/foo/
Je cherche à afficher une url telle que : http://anoen.local/foo/
Je cherche à afficher une url telle que : http://anoen.local/foo/
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
18 nov. 2011 à 17:51
18 nov. 2011 à 17:51
jusqu'a preuve du contraire, mon exemple n'écrit pas ton url à ta place, donc à toi d'écrire ton url convenablement
moi je te donne la manière de récupérer les paramètres sous cette forme :
http://anoen.local/foo/
moi je te donne la manière de récupérer les paramètres sous cette forme :
http://anoen.local/foo/
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
22 nov. 2011 à 19:25
22 nov. 2011 à 19:25
Alors, je suis partie sur ceci pour tester :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)\.html$ index.php?action=$1 [L]
D'après ce que j'ai compris, je devrais pouvoir accéder à ma page avec http://anoen.local/foo.html
Mais ce n'est toujours pas le cas, uniquement avec http://anoen.local/index/action/foo/
Est-ce que le fait que je passe par un vhost a une incidence là dessus ? Tout ce que j'ai vu dans la doc apache était que le RewriteEngine On devait se trouver dans la déclaration du vhost.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)\.html$ index.php?action=$1 [L]
D'après ce que j'ai compris, je devrais pouvoir accéder à ma page avec http://anoen.local/foo.html
Mais ce n'est toujours pas le cas, uniquement avec http://anoen.local/index/action/foo/
Est-ce que le fait que je passe par un vhost a une incidence là dessus ? Tout ce que j'ai vu dans la doc apache était que le RewriteEngine On devait se trouver dans la déclaration du vhost.
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
22 nov. 2011 à 19:39
22 nov. 2011 à 19:39
index action et foo, ce sont des repertoires ?