Est-il possible de rediriger les données post?

J'ai un site Web où toutes les requêtes sont redirigées silencieusement (via .htaccess) vers index.php et ensuite PHP est utilisé pour afficher la bonne page (en analysant le REQUEST_URI).

Je me demandais s'il était possible de soumettre des données POST à une fausse adresse aussi?

J'ai actuellement mon formulaire comme ça...

<form action="/send-mail" method="post">

Et ma règle .htaccess est...

# redirect mail posting to index
RewriteRule send-mail index.php?send-mail [NC,L] 

Mon index.php vérifie isset($_GET['send-mail']), qui fonctionne très bien.

Cela semble cependant déposer toutes les données POST qui devraient être envoyées à il.

Existe-t-il un moyen de conserver les données post? Je ne veux pas utiliser GET car il ne peut pas envoyer autant d'informations, bien que ce ne soit pas un problème avec un simple formulaire de demande.

Voici mon .htaccess pour rediriger vers index.php

# serve files and dirs if they exist please, otherwise send to index
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php
50
demandé sur alex 2008-12-11 05:10:07

5 réponses

Essayez ceci:

# redirect mail posting to index
     RewriteRule send-mail index.php?send-mail [NC,P]

" P "agit comme" L " en ce sens qu'il arrête le traitement des règles mais indique également au module que la requête doit être transmise au module proxy intact (ce qui signifie que les données POST sont conservées).

59
répondu Tautologistics 2008-12-11 02:57:41

Vous devriez pouvoir simplement rediriger vers index.php, puis dans ce script, accéder à $_SERVER['REQUEST_URI'] pour voir la requête d'origine, avec" send-mail " intact.

En passant, "ne peut pas envoyer autant d'informations" n'est pas la raison d'Utiliser POST. La raison d'Utiliser POST est que la demande modifiera les données sur votre site, au lieu de simplement récupérer des données.

Supposons que vous mettez un lien hypertexte sur votre page avec une requête GET comme " /delete_user?id=1234", puis un moteur de recherche suit innocemment le lien tel qu'il est l'indexation de votre site. C'est pourquoi les requêtes GET ne sont pas bonnes pour les requêtes qui modifient les données.

7
répondu Bill Karwin 2008-12-11 03:04:45

Tant que vous n'utilisez qu'une réécriture interne, pas une redirection HTTP, vous ne devriez pas perdre de données POST. Voici la règle que j'utilise sur mon site:

RewriteRule ^(.*)$ index.php/$1 [L]

Essayez d'utiliser L'extension HTTPLiveHeaders pour Firefox (ou quelque chose de similaire) et suivez toute la demande de page. Assurez-vous que vous n'obtenez pas de redirection HTTP. Si vous obtenez une réponse HTTP/1.1 3xx et un emplacement : http://address en-tête, c'est le problème. Votre règle de réécriture que vous avez publiée devrait ne pas provoquer que cela se produise. Si vous êtes redirigé, il y a probablement une erreur dans votre code PHP ou une autre règle de réécriture qui est appliquée.

1
répondu mcrumley 2008-12-11 02:59:59

Pour éviter les problèmes avec certains proxies et réécritures Apache, transmettez les données POST ou définissez l'en-tête Content-Length: 0 pour les requêtes avec un corps vide.

J'ai récemment eu des problèmes avec Apache convertissant ma requête en GET en faisant un POST avec un corps vide. Donc, au lieu de cela:

 curl -X POST https://example.com/api/user/123456789

Passez l'en-tête Content-Length:

 curl -X POST https://example.com/api/user/123456789 -H 'Content-Length: 0'

Ou passer quelque chose dans le corps:

 curl -X POST https://example.com/api/user/123456789 -d ''
1
répondu Alex Pop 2016-12-04 23:42:01

Je veux rediriger user_login.PHP to seo friendly url like / user-login avec des données de formulaire post et cela a fonctionné pour moi.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/user_login\.php [NC]
RewriteRule ^ user-login [QSA,R=301]
RewriteRule ^user-login$ user_login.php [QSA,L]

Dans le fichier d'affichage

<form action="<?php $siteurl;?>/user-login" method="post" id="user_login">
0
répondu Kamal Kumar 2015-02-27 13:13:56