6

この質問は、私の前の質問にいくらか関連しています。を使用するトリックは、 変数$_SERVER['REDIRECT_QUERY_STRING']に対してのみ機能するようです。$_GET

さて、私はindex.phpすべてを処理するファイルを持っています404 redirects

ユーザーが存在しないページを要求した場合、たとえば、apple.php?item=23を使用すると変数$_SERVER['REDIRECT_QUERY_STRING']を取得できますが、$_GET変数item=23が存在しない場合$_GET$_POST機能$_SERVER['REDIRECT_QUERY_STRING']しません。

次の.htaccess設定$_POSTを使用してリダイレクトするときに変数を取得するにはどうすればよいですか?index.php

ErrorDocument 404 /index.php

4

3 に答える 3

7

ここで答えを確認してください:http://www.brainonfire.net/blog/apache-pitfall-errordocument-post/

これを使用して問題を解決しました。


または、これを .htaccess ファイルに入れます:

    RewriteEngine オン
    RewriteBase /


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /yourErrorDocument.php [L]

于 2013-02-26T12:34:42.820 に答える
5

次のディレクティブを使用します。

ErrorDocument 404 /index.php

Apache Webサーバーは、新しい場所への内部リダイレクトを実行します。内部的な意味では、クライアント(ブラウザ)は、リダイレクトがブラウザに伝達されないため、アドレスバーのURLを変更しません。

リダイレクトであるため、POSTリクエストはGETリクエストに変換されます。

$_SERVERこれは、次の2つの変数を調べることで確認できます。

$_SERVER['REDIRECT_REQUEST_METHOD'] # POST
$_SERVER['REQUEST_METHOD'] # GET

つまり、ErrorDocumentディレクティブを使用してHTTPPOSTリクエストのURL書き換えを行うことはできません。

mod_rewriteこのためのモジュールを使用するか、独自のapacheハンドラーを作成する必要があります。

于 2012-05-01T11:36:33.813 に答える