0

私の .htaccess ファイルには次のルールがあります。

RewriteRule ^submit index.php?task=submit [L]

index.php?task=submit を参照するサイト上のリンクを /submit にリダイレクトします。

ただし、この同じページに情報を投稿しているため、最終的に URL は次のようになります。

index.php?task=submit&path=xyz&key=xyz.jpg&code=1234

投稿方法の性質上、index.php?task=submit に投稿する必要があります。

ユーザーが URL として拡張パスを手動で入力した場合、URL を書き換えるルールはありますか?

4

2 に答える 2

1

Query String Append を表すQSAflagを探しているようです。書き換えられたクエリ文字列を受信クエリ文字列と結合します。

RewriteRule ^submit index.php?task=submit [L,QSA]

つまり、これは...

/submit?path=xyz&key=xyz.jpg&code=1234

...これに適切に書き換えられます:

index.php?task=submit&path=xyz&key=xyz.jpg&code=1234
于 2013-01-30T05:23:10.170 に答える
0

投稿方法の性質上、index.php?task=submit に投稿する必要があります。

本当じゃない。POST フォームであれば、問題なくフォームを指定できます。/submitGET フォームの場合は [QSA] フラグが必要ですが、それでも問題ありません。

しかし、あなたのコメントから、ユーザーにはアドレスバーに「/submit」が表示されるようにしたいが、スクリプトは追加の GET 変数にアクセスできるようにしたいと考えています。これは機能しません。書き換えの概念を誤解しているようです:

index.php?task=submit TO を書き換えているのではなく/submit(魔法のようにユーザーに何か他のものを表示するなど)、/submit TO index.php?task=submitを書き換えています (ユーザーが要求したよう/submitに、このリクエストは内部的に別のリクエストに書き換えられます)。

そのため、元のリクエストにパス、キー、コードの情報が含まれていない場合、書き換えられたリクエストもできません。ただし、それらをセッションに保存してから/submit、PHP にリダイレクトすることもできます。

スクリプトは次のように構成されます。

session_start();
if (isset($_GET['path'])) {
    $_SESSION['path'] = $_GET['path'];
    header('Location: http://' . $_SERVER['HTTP_HOST'] . '/submit');
    session_write_close();
    exit;
}
if (isset($_SESSION['path'])) {
    $path = $_SESSION['path'];
    unset($_SESSION['path']);
    // do stuff with $path
}

これが合理的な解決策であるかどうかは、この「送信」アクションが何をするかによって異なります。情報を取得する検索のようなものでは問題ないかもしれませんが、情報を保存するものについては、POST/REDIRECT/GETパターンの方が優れたアプローチです。

于 2013-02-09T17:01:24.457 に答える