Si tu veux publier un jour ton site, je te conseille de créer un virtual host
en définissant monsite.dev -> 127.0.0.1 dans ton fichier hosts
puis en créant un vhost dans apache
comme ça tu auras directement des urls http://monsite.dev/home
Bonjour,
je galère sur l'url rewriting, ça "fonctionne" déjà un peu, mais voilà mon problème :
Ce que je fais
Mon arborescence :
www/mon_site/.htaccess
www/mon_site/public/index.php
www/mon_site/app/controller/...
www/mon_site/app/views/...
...
Dans header.php (quand je suis connecté j'ai un bouton "profil") :
Dans le .htaccess :
Ce que je veux
Quand je navigue dans cet ordre : Accueil, Profil, Accueil
j'aimerai voir dans la barre d'adresse :
mon_site/home
mon_site/user/show/9 (disons que mon ID est 9 pour l'exemple)
mon_site/home
Ce que j'obtiens
mon_site/home
mon_site/user/show/9
mon_site/user/show/home (Catastrophe !!)
14 réponses
Bonjour SLK,
comme ton 'home' est à la racine, as-tu essayé '/home' dans le href ?
Salut Huggy,
merci d'essayer de m'aider.
Je viens d'essayer de remplacer dans la vue :
par
Ce qui m'a donné dans ma barre d'adresse :
au lieu de
et donc une "page introuvable"
Du coup j'ai essayé de modifier aussi le htaccess, pour rajouter "mon_site" :
J'ai remplacé :
par :
puis par :
Mais ça ne fonctionne pas.
Ce n'est qu'un site de test en fait, je ne compte pas le publier.
Pour l'instant j'essaie d'apprendre l'URL Rewriting, et je bloque toujours sur le même problème.
Une fois que j'utilise une URL plus longue dans l'arborescence, je ne peux pas utiliser d'URLs du niveau inférieur.
Je donne un exemple, dans cet ordre :
(en haut c'est l'attribut "href" envoyé par mes "vues",
en bas c'est l'url qui s'affiche dans ma barre d'adresse du navigateur) :
A
B
A
B/C
A
Effectivement B/A n'existe pas, moi c'est sur A que je voulais aller :'(
Je "traduis" mes autres fichiers pour correspondre à cet exemple simplifié (ça devrai être plus facile pour identifier le problème).
mon fichier index.php est ici :
www/mon_site/public/index.php
ma vue :
mon .htaccess :
[EDIT]
j'ai pu "contourner" mon problème en remplaçant le "/" dans mon .htaccess par un "."
Mais bon... ce n'est pas propre du tout... Ça me donne ça dans ma barre d'adresse :
Alors que j'aurai aimé avoir une URL normale, avec des "/" :
(j'imagine que c'est très mauvais pour le référencement)
Je pense qu'avec un flag L (last) ça devrait marcher
Comme la règle B matche aussi B/C il faut stopper l'évaluation si B/C est vérifié en mettant [L]
Mince, j'ai essayé de mettre le flag [L] sur l'une, puis sur l'autre, puis sur les 2.
Mais ça ne change rien.
Il ne faut rien faire de spécial pour "activer" les flags ? (je ne pense pas...)
En tous cas merci quand même d'essayer de m'aider ^^
En fait même si les chemins n'ont rien à voir j'ai le même problème.
Par exemple :
.htaccess :
A
B
Z/C
A
Le problème c'est que le chemin de la dernière URL semble rester en mémoire.
Seule la dernière partie du chemin de l'ancienne URL est écrasé, par la nouvelle URL.
Alors qu'il faudrait que la nouvelle URL reparte de 0.
désolé je fais un petit up,
je n'y arrive toujours pas :'(
Lorsque tes urls ne commencent pas par un /, c'est quelles sont relatives
si tu es sur une page monsite/A et que tu cliques sur un href='B', alors tu vas en monsite/A/B
Il faut s'aranger pour avoir des urls absolues en gérant par exemple une variable BASE_URL = '/monsite/'
et pour les href = BASE_URL . 'A'
Le jour ou tu passes de 'localhost' au domaine 'monsite', il suffira de changer BASE_URL = '/'
D'accord, ça me semble très clair.
Du coup j'ai commencé par mettre en absolue la redirection du .htaccess :
et
J'arrive bien sur la bonne page, dans mon navigateur j'ai :
Maintenant j'essaie de régler mon problème, en passant les href en absolue
et
Mais dans mon navigateur ça me donne une page introuvable :
Désolé J'ai du mal hein...
Du coup j'ai essayé de mettre
puis avec le slash devant
et puis je pars dans des délires...
rien n'a fonctionné
Si ton htaccess est dans le dossier mon-site alors l'expression testée est amputée de /mon-site
tu dois donc tester uniquement A
Ah ça y est ça fonctionne ! (phew...)
Le .htaccess est bien dans le dossier mon_site oui, mais ce n'était pas ça le problème.
J'explique un peu si ça peut en aider d'autres.
1) Ma 1ère erreur était d'utiliser des liens relatif dans mes vues
alors qu'il fallait utiliser des liens absolus
1ère erreur corrigée par Huggy (merci !)
2) Ma 2ème erreur était d'avoir mal compris le fonctionnement des "RewriteRule"
Ce que j'avais compris :
a) on envoie le lien depuis le href
b) on récupère ce lien dans la partie gauche du RewriteRule,
et on REDIRIGE (dans la partie droite de RewriteRule) vers le vrai lien
Mais pas du tout... :'(
Ce qu'il fallait comprendre
a) on envoie bien le lien absolu depuis le href, ça OK
b) mais le RewriteRule ne fais pas une REDIRECTION,
ça REMPLACE le pattern (partie gauche du RewriteRule) trouvé dans le href, par la partie droite du RewriteRule
Ici, dans mon lien absolu donné par le href "/mon_site/home",
"home" sera REMPLACÉ par "public/index.php?p=general.home"
pour avoir au final
"/mon_site/public/index.php?p=general.home"
Voilà,
Merci encore Huggy pour ton aide et ta patience.