3

URL でパラメーター (query_string) を非表示にする方法、非表示のページに送信する方法、アドレス バーの
例では表示されない:
私はこれを持っています:

http://localhost/index.php?sent=true

私が欲しい:

http://localhost/index.php

しかし、PHP $_GET['sent'] で送信パラメータを取得したい

パラメータなし(query_stringなし)[R]でページにリダイレクトしようとした後、[R]リダイレクトなしで(アドレス自体を変更せずに)ページにいくつかのパラメータを(静かに)与えます

さまざまなフラグとさまざまな方法で htaccess で RewriteRule を使用しようとしましたが、何も機能しませんでした

ブラウザでアドレスを変更したい場合は、RewriteRule の 1 行で R フラグと L フラグを使用する必要があることを知りました - 他の方法では機能しません - アドレスは変更されません

しかし、[L]フラグを使用すると、次の行(次のRewriteRule)に移動できず、[R]リダイレクトなしでアドレスにクエリ文字列を追加できません

[L] フラグを最初の行に ([R] を使用して) 配置しない場合、新しいアドレスはありませんが、配置すると [C] フラグも [N] フラグも使用できません。


理由は次のとおりです。

私のページでは、フォームからデータが正常に送信された後、header('Location: ...?sent=true') 関数を使用します。ユーザーがページを更新して同じデータを再度送信したくないため、?sent=true にリダイレクトします。

しかし、 ?sent=true にリダイレクトした後、アドレスバーにその query_string を入れたくありません そのページには、他の POST データを送信し、この醜い query_string でページを更新するフォームがさらにあります

どうやってするか?

4

3 に答える 3

2

終了後にスクリプトにアクセスすると?sent=true、ユーザーをリダイレクトするように設定できます

例えば

if(!empty($_GET['sent'])&&$_GET['sent']) {
    //do stuff
    header("Location: http://localhost/index.php");
}

PHPに渡す必要があるため、htaccessでこれを行うことはできません。リダイレクト後にPHPに渡されるため、htaccessでリダイレクトすると、値がPHPに到達しません。


さらなる質問、これを行う唯一の方法は、JavaScriptフォームでユーザーをリダイレクトすることです

<?php if(!empty($_GET['sent'])&&$_GET['sent']) { ?>
<form action='http://localhost/index.php' method='post' name='frm'>
    <?php
    foreach ($_GET as $a => $b) {
        echo "<input type='hidden' name='".$a."' value='".$b."'>";
    }
    ?>
    </form>
    <script language="JavaScript">
        document.frm.submit();
    </script>
<?php } ?>
于 2012-10-04T16:12:06.017 に答える
1

Apache で変数を割り当てることができます。

SetEnvIf Request_URI "\sent=true$" SENT=1

次に、次のように PHP で取得します。

if (isset($_SERVER['SENT'])) {
   echo "Received sent variable from apache, value is " . $_SERVER['SENT'];
} else {
   echo "not received sent variable from apache";
}

更新:次の例のように、httpd.confファイルまたは.htaccessファイルにor
を設定する必要があります。AllowOverride FileInfoAllowOverride ALL

<Directory /home>
 AllowOverride FileInfo
</Directory>
于 2012-10-04T16:29:25.840 に答える
0

Cookieを使用してページ間でデータを渡すことができ、Cookieは表示されないため、少なくとも一般ユーザーにとっては簡単ではないため、Cookieはこの解決策になる可能性があります。

または、可能であれば、$_SESSIONは1つのページから別のページにデータを送信するための優れたソリューションでもあります。

于 2012-10-04T16:19:11.500 に答える