Aller au contenu

Rewrite url : conflit entre .htaccess et fichier route Laravel


Sujets conseillés

Posté

Bonjour à tous smile.gif,



Je voudrais réécrire des url de mon site mais cela entre en conflit avec le fichier routes.



Le site utilise le framework Laravel et je fais donc mes belles urls dans le fichier app/routes.php.



Il se trouve que j'ai une page qui liste des résultats sur mon site et j'aimerai réécrire cette url via le .htaccess et non le fichier routes.



Mon public/.htaccess est le suivant :



<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Rewrite url
RewriteRule ^(test|test2)/domaine/([a-z0-9\@\&\+\.\_\-]+)-([0-9]+)/?.*$ $1/liste?var=$3 [L]

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

</IfModule>

Quand je me rend à l'adresse www.monsite.com/test/domaine/loremipsum-10/ le framework identifie "test" et essaye de charger la fonction domaine du controller test au lieu de réécrire mon url et de me donner le résultat de la page www.monsite.com/test/liste?var=10



En revanche si je met cette ligne dans le .htaccess :



RewriteRule ^(test|test2)/domaine/([a-z0-9\@\&\+\.\_\-]+)-([0-9]+)/?.*$ http://www.monsite.com/$1/liste?var=$3 [L]

Cela me retourne la bonne page sans problème de route mais je suis redirigé et l'url n'est donc pas réécrite. J'obtiens donc une url de ce type : www.monsite.com/test/liste?var=10



Je crois que la redirection dans ce cas est normale car je met le nom complet du site (>http://www...com) mais je n'en suis pas sûr (les rewriteRule ça me dépasse).



Comment faire pour avoir une réécriture de la page sans que le framework cherche à charger la fonction correspondante du controller courant ?



Merci par avance


Posté

Ce n'est pas au fichier htaccess de générer les liens. Ce qui s'affiche dans ta page dépend de la stratégie de génération d'URL de ton framework, en l’occurrence, ton fichier route et certainement une fonction au niveau de ta vue/controller (comme la majorité des framework).



Il te faut adapter la route pour que "test/domaine/loremipsum-10" n'appelle pas ton controller test::domaine(), et tu n'as pas à trifouiller dans le htaccess.


Je serai étonné -très- que tu ne puisses pas faire cela dans ta route ( on dirait que oui en ayant parcouru en surdiagonale la doc http://docs.laravel.fr/4.2/routing ).



Note que je ne connais pas laravel, mais bon... dans tous les frameworks, c'est pareil.

Posté

Salut,



J'ai modifié ma fonction liste et mon fichier routes de façon à ce que la fonction gère les belles urls et les url types liste?var=...



Effectivement je cherchais pas dans le bon sens...



C'est réglé maintenant...


Merci .


Veuillez vous connecter pour commenter

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



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