redirectmatch ändert den zu erhaltenden Post

8

Ich habe zwei getrennte vhost. Auf dem www. Eine, ich habe diese einzige Zeile auf .htaccess

installiert %Vor%

Alles funktioniert wie erwartet, außer dass der POST in GET konvertiert wird.
Bitte beachten Sie, dass der Post Parameter als get hat (ich habe es nicht getan, und ich werde es nicht ändern), ich versuche nur, doppelten Inhalt zu vermeiden. Ich zeige eine Firebug-Spur.

Ich erwarte, dass der POST mit Redirectmatch oder einem anderen Trick auf die Hauptdomain umgeleitet wird.

Aktualisieren
Ich habe die Hälfte der internen Links auf der Website mit www und die andere Hälfte ohne geschrieben. Also muss ich beide öffentlich halten, aber nicht duplizieren. Ich brauche die GETs weitergeleitet als GETs und die POSTs als POSTs behandelt. Das Problem ist groß, ich habe 12000 indizierte Seiten und viele Formulare. Also suche ich zuerst nach einer generischen Lösung, ohne den Code zu ändern. Ich habe die volle Kontrolle über den Server.

Vielen Dank

    
Luis Siquot 14.05.2012, 15:53
quelle

4 Antworten

6

Eine Weiterleitungsantwort von Ihrem Server für jede Anfrage, unabhängig davon, ob Sie eine POST- oder GET-Anfrage gestellt haben, führt immer dazu, dass Ihr Client eine GET-Anfrage macht (es sei denn, Sie erlauben es NICHT automatisch Weiterleitungen zu folgen) mit curl, aber ich kenne keine weit verbreiteten Browser mit dieser Funktionalität einfach für den Benutzer verfügbar). Der Client-Browser übernimmt die von der Weiterleitung bereitgestellte URL und behandelt sie als URL, um eine GET-Anfrage auszuführen. Um es herum werden die POST-Daten vom Server verworfen, da sie für die Server-Ressource unter der ursprünglichen URL bestimmt waren.

Wenn Sie außerhalb von .htaccess umleiten, sagen Sie in einer PHP-Datei, um Redirect-Response zu konstruieren, besteht Ihre einzige Option darin, die POST-Parameter in eine Kette von GET-Parametern umzuwandeln und am Ende der URL, die Sie zurücksenden, hinzuzufügen Client mit Ihrer Weiterleitungsantwort.

Ich bin ziemlich zuversichtlich, dass es keinen Weg gibt, automatische POST-Parameter zum Umleiten in der .htaccess-Datei oder in den httpd.conf-Dateien zu verwenden, egal ob Sie die Umleitungsdirektive oder die Rewrite-Direktive über das mod_rewrite-Modul verwenden. p>     

Ray 14.05.2012 15:57
quelle
5

Sie redirect mit 307 statt 301, um die Post-Daten zu behalten, aber einige Browser zeigen einen Dialog für den Benutzer, wenn er sicher ist, dass er die Post-Daten gesendet werden soll, also nicht wirklich hübsch.

Aber ich würde lieber gehen und das Problem an der Wurzel beheben. Die einzige Möglichkeit, einen Beitrag in die falsche Domain zu bekommen, ist, wenn das HTML-Formular auf die falsche Domain verweist (z. B. <form action="www.d_blur_blur_s/public/main/loginGenerator.php" ... ). Einfach das HTML reparieren.

Machen Sie sich keine Gedanken über doppelte Inhalte, da Suchmaschinen niemals Nachfragen senden, sondern nur bekommen. Ihre aktuelle Lösung sollte den doppelten Content verhindern.

    
Gerben 16.05.2012 18:08
quelle
2

Der einzige Weg, um eine Umleitung zu machen und POST-Daten zu erhalten (das ist mir bekannt) ist, mod_rewrite mit mod_proxy zu verwenden und dann P flag in RewriteRule zu verwenden.

Aktivieren Sie auf Ihrem www host mod_rewrite, mod_rewrite und .htaccess bis httpd.conf und fügen Sie diesen Code dann in Ihr .htaccess unter DOCUMENT_ROOT -Verzeichnis ein:

%Vor%     
anubhava 18.05.2012 15:19
quelle
2

Ich habe dieses POST- & gt; GET auch neu geschrieben. Ein API-Aufruf wie folgt:

%Vor%

hat mein API-Framework mit einer GET-Anforderungsmethode aufgerufen.

Die Ursache scheint mit POST-Anfragen mit einem leeren Körper in Verbindung zu stehen. Um dieses Problem zu vermeiden, können Sie den Content-Length header:

setzen %Vor%

oder etwas im Körper übergeben:

%Vor%     
Alex Pop 04.12.2016 23:06
quelle

Tags und Links