2010-05-19 11 views
0

Nous avons une application qui s'exécute sur IIS 6 qui utilise un HttpModule personnalisé pour réécrire les urls. Cela fonctionne très bien (bien nous) sauf dans le cas où la destination Context.RewritePath est un fichier .php. Le fichier php est exécuté comme prévu, mais la collection $ _POST est vide, ce qui signifie qu'il ne peut pas accéder aux formulaires soumis à des URL réécrites. Le problème n'existe pas lors de la réécriture de fichiers .aspx car la collection Request.Form est correcte.

Ma question comporte donc deux parties: Pourquoi la collection $ _POST n'est pas remplie? Y at-il un moyen de s'assurer que la collection .php $ _POST est correctement remplie après une réécriture?

Je n'ai pas grand chose à montrer en matière de code. Il y a juste un simple:

context.RewritePath(newPath); 

une fois que le module Http a déterminé où envoyer la demande.

Edit: Fait intéressant, si je var_dump(file_get_contents('php://input')); dans le fichier PHP (méthode described here) le contenu du formulaire est affiché. Les données atteignent donc le script PHP mais pas le tableau $ _POST.

Répondre

1

La redirection transforme une action POST en une action GET, ce qui signifie que tous les paramètres POST initialement envoyés sont perdus. Vous devrez utiliser une méthode backchannel (par exemple, des sessions) pour transmettre les variables.

+0

Merci pour votre réponse incroyablement rapide. Comment se fait-il que les pages .aspx puissent accéder à la collection de formulaires mais les fichiers .php ne le peuvent pas? – jammus

+0

Ma conjecture est que ASP.NET implémente le backchannel de manière transparente. –

+0

Bon vieux ASP.NET. Intéressant un appel à file_get_contents ('php: // input') montre que les données POST passent d'une manière ou d'une autre. Juste que le tableau $ _POST n'est pas rempli. – jammus