0

http://mysite.com/?action=add&goback=1のような URL をリダイレクトしたいhttp://myiste.com/add/?goback=1

私は来た:

location / {
    if ($request_uri ~* /\?action.*) {
        add_header Cache-Control private;
        rewrite ^/\?action=([^&]*)&?(.*)$ /$1/?$2 permanent;
    }
}

しかし、うまくいかず、理由がわかりません。

PS私はadd_headerちょうどif ($request_uri ~* /\?action.*) {起こったことを示す必要がありました. 私は他のいくつかのソリューションを試しました

rewrite ^/\?action=(\w+).*$ /$1/?$query_string permanent;

失敗。

更新

実際の目標は次のとおりです。

URLがこのように見える場合

http://mysite.com/add/?param1=param1&...

/(add)/ はアクション パラメータになる必要があります。

location  ~ /[\-\w]+/ {
    rewrite ^/([^/]*).*$ /?action=$1 last;
    ...
}

これは適切に機能しているようで、これについては追加のヘルプは必要ないと思います

URL が次のようになっている場合:

http://mysite.com/?action=add&param1=param1&...

nginx は次の場所にリダイレクトする必要があります。

http://mysite.com/add/?param1=param1&...

この部分を実行しようとすると、必要のない結果が得られます-無限のリダイレクトループ、 のような URLhttp://mysite.com/add/?action=add&param1=param1&...など。

私の目標に対処するソリューションはありますか?

4

1 に答える 1

2

これはrewriteURI パスのみに一致し、クエリ文字列 (別名引数) を使用せずに一致するためlocationです。代わりに次のようにしてみてください。

location = / {
    if ($arg_action) {
        rewrite ^ /$arg_action/ permanent;
    }
}

チェックはlocation = /、ルールが へのリクエストにのみ適用されることを確認し、引数があるかどうかをチェックし/、実際に書き換えられた URI へのリダイレクトを行います。クエリ文字列は、元のリクエストから (デフォルトで) 保持されます。if ($arg_action)action=...rewrite ^ /$arg_action/ permanent;

ドキュメントについては、 http://nginx.org/r/rewriteを参照してください。

于 2012-09-24T10:50:56.253 に答える