OVH Community, votre nouvel espace communautaire.

Variables POST perdus lors d'un url rewrite


stephaneeybert
03/05/2012, 21h11
Merci pour cette explication. Je crois que je vais integrer les urls dans les formulaires.

gaboul49
03/05/2012, 11h18
Citation Envoyé par stephaneeybert
Mais cela rend le script dependant de la presence du module url rewrite et je suis un peu reticent devant cette dependance.. peut-etre a tort ?
Tout comme le référencement de ton site dépend de l'url rewrite.
L'url rewrite est un composant essentiel et indispensable de ton application. Pourquoi serais-tu amené à le désactiver ?

La meilleur façon pour que l'url réelle ne soit pas utilisée, c'est de ne jamais la communiquer à l'extérieure de ton application.

Une bonne idée serait de générer tes urls de façon centralisée.

Par exemple avec le framework Zend, on passe un tableau associatif à une fonction qui retourne l'url.

Code:
$this->url(array('module'=> "myModule", 'controller'=> "myController", 'action'=> "myAction")) // Retourne ton url

stephaneeybert
03/05/2012, 11h09
Et bien la directive

Code:
RewriteRule ^user/login$ engine/modules/user/login.php
permet a l'utilisateur de saisir l'url user/login et au serveur de trouver le script php correspondant.

Et la directive

Code:
RewriteRule ^engine/modules/user/login\.php$ user/login [R=301,P]
est la pour afficher l'url user/login meme si l'utilisateur saisi l'url engine/modules/user/login.php

Cette seconde directive etant une redirection, on perd alors les parametres du post.

Une solution, comme tu l'indiques, est d'avoir l'url user/login dans l'attribut action du formulaire.

Mais cela rend le script dependant de la presence du module url rewrite et je suis un peu reticent devant cette dependance.. peut-etre a tort ?

gaboul49
03/05/2012, 10h06
Si tu veux faire une ré-écriture d'url, l'adresse ne va pas changer dans la barre d'adresse du navigateur. On est bien d'accord.

Et bien tu peux prendre exemple sur ta première ré-écriture qui semble fonctionner.
RewriteRule ^user/login$ engine/modules/user/login.php
Par contre je ne comprend pas ce que tu peux faire.
engine/modules/user/login.php doit correspondre à user/login
mais user/login doit appeler engine/modules/user/login.php

Ça ne peut pas marcher.
Si tu veux ré-écrires tes url, c'est pour communiquer des adresses propres, lisibles. Donc il n'y a aucune raison d'écrire engine/modules/user/login.php dans un script, un formulaire ou une page web. Tu dois écrire ton formulaire pour qu'il envoi les données vers user/login

stephaneeybert
03/05/2012, 10h01
Effectivement, c'est une redirection, et ca explique la perte des variables post. Y aurait il moyen de faire unere-ecriture d'url alors ?
Merci !

gaboul49
03/05/2012, 09h51
J'ai l'impression qu'il y a confusion.

Tu veux faire de la ré-écriture d'url ou une redirection ?

Dans le second cas :
RewriteRule ^engine/modules/user/login\.php$ user/login [R=301,P]
n'est-ce pas une redirection ?

[R] (force Redirect)
Redirect the URL to a external redirection
http://www.widexl.com/tutorials/mod_rewrite.html

stephaneeybert
01/05/2012, 12h23
Bonjour,

J'aimerais bien avoir un url rewrite sur un formulaire.

J'ai essaye une directive mais les variables POST sont perdues et le formulaire n'est donc pas accepte.

J'ai publie le probleme a http://www.sitepoint.com/forums/show...rameters/page2
mais sans succes pour le moment.

Pour resumer, j'ai deux directives, une pour changer
user/login
en
engine/modules/user/login.php

La voila:
RewriteRule ^user/login$ engine/modules/user/login.php

Et une autre, (celle qui ne marche pas comme je voudrais) pour changer
engine/modules/user/login.php
en
user/login

La voila:
RewriteCond %{IS_SUBREQ} false
RewriteRule ^engine/modules/user/login\.php$ user/login [R=301,P]

Le probleme avec cette seconde directive est que les variables POST sont perdus lors du rewrite.