web-dev-qa-db-ja.com

投稿データをリダイレクトすることは可能ですか?

私はすべてのリクエストがサイレントに(.htaccessを介して)index.phpにリダイレクトされ、その後PHPを使用して(REQUEST_URIを解析することにより))正しいページを表示するWebサイトを持っています。

POSTデータを偽のアドレスに送信することは可能ですか?

現在、私のフォームは次のようになっています...

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

そして、私の.htaccessルールは...

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

私のindex.phpisset($_GET['send-mail'])をチェックします。これは正常に動作します。

ただし、これは、送信されるべきすべてのPOSTデータをドロップオフするようです。

投稿データを保持する方法はありますか?単純な問い合わせフォームでは問題にならないかもしれませんが、GETはあまり多くの情報を送信できないため、使用したくありません。

.htaccessにリダイレクトするための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
51
alex

これを試して:

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

「P」はルールの処理を停止するという点で「L」のように機能しますが、リクエストをプロキシモジュールにそのまま渡す必要があることもモジュールに伝えます(POSTデータは保存されます)。

61
Tautologistics

単純にindex.phpにリダイレクトし、そのスクリプトで$_SERVER['REQUEST_URI']にアクセスして、元のリクエストを「送信メール」のままそのまま表示できるようにする必要があります。

ちなみに、「それほど多くの情報を送信できない」ことは、POSTを使用する理由ではありません。 POSTを使用する理由は、単にデータを取得するのではなく、リクエストがサイト上のデータを変更するためです。

"/delete_user?id=1234"のようなGETリクエストを使用してページにハイパーリンクを配置し、サイトをインデックス付けしているときにいくつかの検索エンジンが無邪気にリンクをたどるとします。これが、GET要求がデータを変更する要求に適していない理由です。

7
Bill Karwin

一部のプロキシとApacheの書き換えに関する問題を回避するには、POSTデータを渡すか、Content-Length: 0本文が空のリクエストのヘッダー。

私は最近、空のボディでGETを実行するときに、リクエストをPOSTに変換するApacheで問題が発生しました。したがって、これの代わりに:

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

Content-Lengthヘッダー:

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

または、ボディに何かを渡す:

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

HTTPリダイレクトではなく内部書き換えのみを使用している限り、POSTデータを失ってはいけません。私のサイトで使用するルールは次のとおりです。

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

FirefoxのHTTPLiveHeaders拡張機能(または同様のもの)を使用して、ページリクエスト全体を追跡してください。 HTTPリダイレクトを取得していないことを確認してください。 HTTP/1.1 3xx応答とLocation:http:// addressヘッダー、それが問題です。投稿したリライトルールによって、それが発生することはありません。リダイレクトされている場合、おそらくPHPコードにエラーがあるか、適用されている別の書き換えルールがあります。

0
mcrumley

私はuser_login.phpを/ user-loginのようなseoフレンドリーなURLにポストフォームデータでリダイレクトしたいのですが、これは私のために働きました。

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]

ビューファイル内

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