2012-05-14 15 views
8

Ich habe zwei getrennte vhost. Auf dem www. ein, habe ich diese einzige Linie auf .htaccessRedirectMatch Änderungen Post bekommen

instaliert wie erwartet
redirectMatch 301 ^(.*)$ http://d_blur_blur_s.com$1 

Alle Arbeiten, außer dass in dem Fall, in dem die POST umgewandelt zu bekommen.
Bitte beachten Sie, dass der Post Parameter als get hat (ich es nicht getan, und ich werde es nicht ändern) Ich bin nur Duplicate Content zu vermeiden versuchen. Ich zeige Firebug-Spuren.

Ich erwarte, dass die POST auf der Hauptdomain mit RedirectMatch oder anderem Trick umgeleitet haben.

firebug trace

aktualisieren
Ich habe die Hälfte der internen Links auf der Website mit www geschrieben und die andere Hälfte ohne sie. 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 volle Kontrolle über den Server.

Vielen Dank

Antwort

6

Eine Antwort zum Umleiten von Ihrem Server für was auch immer Anfrage Sie gemacht, und zwar unabhängig davon POST sein oder GET-Anforderung, führt immer in der Client eine GET-Anfrage zu machen (wenn Sie es irgendwie ermöglichen nicht automatisch folge Weiterleitungen - manchmal mache ich das mit curl, aber ich kenne keine weit verbreiteten Browser mit dieser Funktionalität, die dem Benutzer leicht zugänglich ist. 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 Serverressource 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 hinzuzufügen, an die Sie zurücksenden der Client mit Ihrer Weiterleitungsantwort.

Ich bin ziemlich sicher, dass es keine Möglichkeit gibt, automatische POST-Parameter zum Umleiten in der .htaccess-Datei oder in den httpd.conf-Dateien zu verwenden, ob Sie die Umleitungsdirektive oder die Rewrite-Direktive über das Modul mod_rewrite verwenden.

5

Sie umleiten mit 307 statt 301, um die Post-Daten zu halten, 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 zu der falschen Domain bekommen würde, wenn das HTML-Formular auf die falsche Domain verweist (z <form action="www.d_blur_blur_s/public/main/loginGenerator.php" ...). Einfach das HTML reparieren.

Sie nicht über dupliziert Inhalt kümmern, wie nie Suchmaschinen Post-Anfragen senden, nur bekommen. Ihre aktuelle Lösung sollte den doppelten Inhalt verhindern.

+0

das ist richtig, aber ich will nicht von jetzt drei Party-Anwendung berühren –

+0

dann verwenden die 307 – Gerben

2

Der einzige Weg, eine Umleitung und bewahren POST-Daten (dass ich mir bewusst bin) verwenden mod_rewrite mit mod_proxy und verwenden Sie dann P Flagge in RewriteRule zu tun.

Auf Ihrem www Host aktivieren mod_rewrite, mod_rewrite und.htaccess durch httpd.conf und setzen Sie dann diesen Code in Ihrem .htaccess unter DOCUMENT_ROOT Verzeichnis:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule^http://d_blur_blur_s.com%{REQUEST_URI} [P] 
+0

Ich möchte nicht mod_rewrite verwenden, weil es doppelte Inhalte "generieren" –

+1

doppelten Inhalt? Auf der ganzen Welt in Apache-Installationen wird mod_rewrite genau aus diesem Grund verwendet, d.h. um doppelten Inhalt zu vermeiden. – anubhava

+0

die Konfiguration, die Sie propagieren, antwortet mit Inhalt sowohl auf der unformatierten Domain als auch der www-Subdomain, beide antworten mit dem gleichen Inhalt, so dass es sich um duplizierten Inhalt handelt –

2

ich in diese POST- gestoßen> GET als auch neu schreiben. Ein API-Aufruf wie folgt aus:

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

wurde mein API-Framework mit einem GET-Request-Methode eingeben.

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 gesetzt:

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

oder etwas in den Körper gelangen:

curl -X POST https://example.com/api/user/123456789 -d '' 
Verwandte Themen