0

私はnginxにまったく慣れていないので、誰かが私に手を貸してくれるかどうか疑問に思っていました.

私がしようとしているのは、これを変えることです:

domain.com/ngu/short.php?t=123

の中へ

domain.com/t/123

誰かが私にそれがどのように行われたかを説明できれば、私はとても感謝しています. 似たような状況でサイトを見回しましたが、まったく同じものは見つからなかったので、少し苦労しています。お時間をいただきありがとうございます:)。

4

2 に答える 2

0

これが他の誰かを助ける場合、これは私(実際には友人)がやったことです:

   location / {
        root /home/jim/www;
        index  index.html index.htm index.php;
        if (!-f $request_filename) {
          rewrite ^/t/(.+)$ /ngu/short.php?t=$1 last;
          rewrite ^/u/(.+)$ /ngu/short.php?u=$1 last;
          rewrite ^/s/ /ngu/short.php last;
          break;
        }
    }

わかりませんが、動作します。

于 2012-08-19T18:53:58.530 に答える
0

次のロケーション ブロックは書き換えを行います。

location ~ /ngu/short.php {
  if ($args_t) {
    rewrite ^ http://$host/t/$v? last;
  }
}

しかし、それには可能なすべての引数を列挙する必要があります。潜在的な引数がたくさんある場合は、おそらく簡単に行うことができます

location ~ /ngu/short.php {
  if ($args ~ "([a-z]+)=(\d+)") {
    set $p $1;
    set $v $2;
    rewrite ^ http://$host/$p/$v? last;
  }
}

説明:

  • /ngu/short.php パスに一致する場所を指定します
  • 上記の最初のコード ブロックは、at=value 引数があるかどうかをチェックし、ある場合は書き換えを行います
  • 上記の 2 番目のコード ブロックは、より一般的な引数 = 何かをチェックします。次に、書き換えルールによって後方参照がリセットされ、直接使用できなくなるため、後方参照を変数に保存する必要があります。
  • いずれの場合も、if が一致しない場合は 404 が返されます
  • $host および $args と $args_ は、標準の nginx 変数ですhttp://wiki.nginx.org/HttpCoreModule#Variablesを参照してください
  • ? を追加します。nginxがURL引数を読み取らないようにするために、書き換えの終わりを広告します
于 2012-08-18T22:02:17.350 に答える