私はすべてのリクエストがサイレントに(.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.php
はisset($_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
これを試して:
# redirect mail posting to index
RewriteRule send-mail index.php?send-mail [NC,P]
「P」はルールの処理を停止するという点で「L」のように機能しますが、リクエストをプロキシモジュールにそのまま渡す必要があることもモジュールに伝えます(POSTデータは保存されます)。
単純にindex.php
にリダイレクトし、そのスクリプトで$_SERVER['REQUEST_URI']
にアクセスして、元のリクエストを「送信メール」のままそのまま表示できるようにする必要があります。
ちなみに、「それほど多くの情報を送信できない」ことは、POSTを使用する理由ではありません。 POSTを使用する理由は、単にデータを取得するのではなく、リクエストがサイト上のデータを変更するためです。
"/delete_user?id=1234
"のようなGETリクエストを使用してページにハイパーリンクを配置し、サイトをインデックス付けしているときにいくつかの検索エンジンが無邪気にリンクをたどるとします。これが、GET要求がデータを変更する要求に適していない理由です。
一部のプロキシと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 ''
HTTPリダイレクトではなく内部書き換えのみを使用している限り、POSTデータを失ってはいけません。私のサイトで使用するルールは次のとおりです。
RewriteRule ^(.*)$ index.php/$1 [L]
FirefoxのHTTPLiveHeaders拡張機能(または同様のもの)を使用して、ページリクエスト全体を追跡してください。 HTTPリダイレクトを取得していないことを確認してください。 HTTP/1.1 3xx応答とLocation:http:// addressヘッダー、それが問題です。投稿したリライトルールによって、それが発生することはありません。リダイレクトされている場合、おそらくPHPコードにエラーがあるか、適用されている別の書き換えルールがあります。
私は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">