it-swarm.com.de

Ist es möglich, Postdaten umzuleiten?

Ich habe eine Website, auf der alle Anforderungen stillschweigend (über .htaccess) an index.php umgeleitet werden und dann mit PHP die richtige Seite angezeigt wird (durch Parsen des REQUEST_URI).

Ich habe mich gefragt, ob es möglich ist, auch POST -Daten an eine falsche Adresse zu senden.

Ich habe momentan meine Form so ...

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

Und meine .htaccess-Regel lautet ...

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

Mein index.php überprüft isset($_GET['send-mail']), was gut funktioniert.

Dies scheint jedoch alle POST - Daten, die an ihn gesendet werden sollen, aufzuheben.

Gibt es eine Möglichkeit, die Postdaten aufzubewahren? Ich möchte GET nicht verwenden, da es nicht so viele Informationen senden kann, obwohl dies bei einem einfachen Anfrageformular kein Problem darstellt.

Hier ist mein .htaccess zum Umleiten zu 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
alex

Versuche dies:

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

"P" verhält sich wie "L", indem es die Verarbeitung von Regeln beendet, dem Modul aber auch mitgeteilt wird, dass die Anforderung intakt an das Proxy-Modul weitergeleitet werden soll (dh die Daten POST werden beibehalten).

60
Tautologistics

Sie sollten in der Lage sein, einfach zu index.php umzuleiten, und dann in diesem Skript auf $_SERVER['REQUEST_URI'] zugreifen, um die ursprüngliche Anfrage mit intaktem "send-mail" anzuzeigen.

Übrigens ist "Nicht so viele Informationen senden" kein Grund, POST zu verwenden. Der Grund für die Verwendung von POST ist, dass die Anforderung die Daten auf Ihrer Site ändert, anstatt nur Daten abzurufen. 

Angenommen, Sie setzen einen Hyperlink mit einer GET-Anforderung wie "/delete_user?id=1234" auf Ihre Seite, und dann folgt eine Suchmaschine unschädlich dem Link, während Ihre Website indiziert wird. Deshalb eignen sich GET-Anforderungen nicht für Anforderungen, die Daten ändern.

7
Bill Karwin

Solange Sie nur eine interne Umschreibung verwenden, keine HTTP-Umleitung, sollten Sie POST -Daten nicht verlieren. Hier ist die Regel, die ich auf meiner Website verwende:

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

Verwenden Sie die HTTPLiveHeaders-Erweiterung für Firefox (oder ähnliches) und verfolgen Sie die gesamte Seitenanforderung. Stellen Sie sicher, dass Sie keine HTTP-Weiterleitung erhalten. Wenn Sie eine HTTP/1.1 3xx Antwort und Location: http: // address Header erhalten, ist dies das Problem. Ihre Umschreibungsregel, die Sie veröffentlicht haben, sollte dies nicht zur Folge haben. Wenn Sie umgeleitet werden, liegt wahrscheinlich entweder ein Fehler in Ihrem PHP - Code oder eine andere Umschreibregel vor, die angewendet wird.

1
mcrumley

Um Probleme mit einigen Proxys und Apache-Neuschreibungen zu vermeiden, übergeben Sie POST-Daten oder setzen Sie den Content-Length: 0-Header für Anforderungen mit leerem Hauptteil.

Ich hatte kürzlich Probleme mit Apache, die meine Anfrage in eine GET umwandelte, wenn eine POST mit leerem Körper ausgeführt wurde. Also stattdessen:

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

übergeben Sie den Content-Length-Header:

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

oder etwas im Körper übergeben:

 curl -X POST https://example.com/api/user/123456789 -d ''
1
Alex Pop

Ich möchte user_login.php umleiten, um eine freundliche URL wie/user-login mit Post-Formulardaten umzuleiten, und das hat für mich funktioniert.

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]

In Ansichtsdatei 

<form action="<?php $siteurl;?>/user-login" method="post" id="user_login">
0
Kamal Kumar