[RESOLU] Rewriting

Eléphant du PHP | 69 Messages

30 oct. 2018, 15:54

Bonjour,

Voila, j'ai ma page 'index' à la racine de mon site avec un htaccess à coté.
J'utilise un $_GET['page'] pour mes différentes page donc en gros j'utilise : index?page=mypage.

J'ai fait un rewriting :
RewriteRule ^([a-z-]*)$ index?page=$1 [L]

Sur ma page 'index' il une include qui insére le contenu selon la page visité.
<?php require''.$_SERVER['DOCUMENT_ROOT'].'/contenu/'.$page_site.'.php'; ?>

Pour savoir d'ou sort le $page_site
$page = $_GET['page'];
$page_fichier = 'contenu/'.$page.'.php';
$page_site = (empty($page)) ? 'index' : ((isset($page) AND file_exists($page_fichier)) ? $page : 'erreur');

Sur une page 'compte' j'aimerai y insérer du contenu 'admin' grace au $_GET['admin'].
<?php require''.$_SERVER['DOCUMENT_ROOT'].'/admin/contenu/'.$admin_site.'.php'; ?>

Et pour comprendre le $admin_site
$admin = $_GET['admin'];
$admin_fichier = 'admin/contenu/'.$admin.'.php';
$admin_site = (empty($admin)) ? 'compte' : ((isset($admin) AND file_exists($admin_fichier)) ? $admin : 'erreur');

Admettons que je veuille accéder à une page 'client' depuis cette admin.
Pour accéder à cette page 'logiquement' il faudrait écrire : index?page=compte$admin=client

La réécriture pour l'admin
RewriteRule ^(compte/[a-z-]*)$ compte?admin=$2 [L]

Bref dans tout ce travail j'ai 2 erreurs.

• La 1ére est que le contenu de l'admin ne fonctionne pas. J'arrive toujours sur ma page erreur
• La 2éme est que ma réécriture ne fonctionne pas (celle de l'admin pas la 1ére)
Ou peut-être simplement que c'est lié.

En tout cas j'ai besoin de vous !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

30 oct. 2018, 17:22

Alors il faut que tu décorrèles les 2 fonctionnalités pour trouver à quel niveau ça coince :
1) l'affichage de ta page avec les paramètres sans réécriture
2) la réécriture d'url

Pour le 1), prends deux exemples d'urls finales réelles (=non réécrites) que tu dois avoir en utilisateur normal et en admin.
Exemple (à mettre avec un vrai nom de page) :
- http://www.domaine.fr/index?page=mapage
- http://www.domaine.fr/index?compte?admin=compte/mapage

:arrow: Si tu entres ces urls dans un navigateur, est-ce que ça fonctionne ?
Si ce n'est pas le cas, tu as un problème au niveau de ton code PHP ou des paramètres que tu passes en GET.


Pour le 2), la réécriture d'url, désormais tu sais sur quelles urls réelles tu dois aboutir avec ce que tu as définit précédemment.
:arrow: Tu peux alors tester tes 2 règles du htaccess sur l'outil suivant qui va te dire comment tes règles vont être comprises :
https://htaccess.madewithlove.be
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 69 Messages

30 oct. 2018, 23:08

Merci de ta réponse.

Alors effectivement j'ai trouver un truc qui cloche.

Quand je vais sur la page 'client' ma variable $admin_site contient : compte?admin=clients
Alors qu'elle est sensé contenir uniquement : clients

EDIT : Bon et bien je pense avoir besoin d'aide. En fait le probléme est que mon $_GET['page'] prend en compte tout ce qui écrit dans l'url.

Dans mon url : index?page=compte&admin=client
mon $_get['page'] devrait contenir uniquement : compte
Hors elle contient : compte?admin=client et du coup une erreur dans mon contenu

Eléphant du PHP | 69 Messages

31 oct. 2018, 11:53

Désoler pour le doublon mais je ne peux rééditer mon message précédant.

J'ai trouver pourquoi mon contenu ne s'afficher pas, j'ai utiliser un '$' au lieu d'un '&' pour séparer mes paramétrés de $_GET...
Une erreur de noob je l'avous.. mais on est tous passés par la :/

En revanche pour la réécriture sa ne fonctionne pas

Pour rappel : je souhaite réécrire mes 2 URLs
• index?page=$1
• index?page=$1&admin=$2 (Qui dans ce cas $1 sera uniquement 'compte')

Voila ce que moi j'ai fait :
RewriteRule ^([a-z-]*)$ index?page=$1 [L]
RewriteRule ^(compte/[a-z-]*)$ compte?admin=$2 [L]

J'arrive constamment sur ma page erreur :(

Avatar du membre
Mammouth du PHP | 1609 Messages

31 oct. 2018, 12:04

Code : Tout sélectionner

RewriteRule ^compte/(\w+)$ index?page=compte&admin=$1 [L]

ou

Code : Tout sélectionner

RewriteRule ^(\w+)/(\w+)$ index?page=$1&admin=$2 [L]

La partie en vert est l'adresse réécrite ou tu injectes les valeurs extraites par le regex en violet, qui s'applique sur l'adresse dans la barre d'adresse, ou plus exactement sur la partie après le / suivant le nom de domaine (en l'occurence compte/client).
Donc si tu veux réécrire compte/client en index?page=compte&admin=client mais que tu écris compte?admin=$2 déjà y a un problème.
Développeur web depuis + de 20 ans

Eléphant du PHP | 69 Messages

31 oct. 2018, 13:46

Ahh yes, merci bien mon grand sa fonctionne de partout !