3

簡単な質問があります。可能であれば、いくつかの問題を解決できます。

nginxでrequest-urlを分割/操作することは可能ですか?

私が言いたいのは:このようなURL:sub.somewhere.com/something/somethingelse

に変わります:

subsomethingsomethingelse

そしてさらに:

sub / som / eth / ing / som / eth / ing / els / e

次に、指定されたパスを使用してファイルを取得します(したがって、おそらく、再利用できる変数に保存するか、直接使用する必要があります)。

これはどういうわけか可能ですか?または、そうでない場合、正確に何が可能であり、制限はどこにありますか?

(編集)PERLモジュールを含めずに、これを行うためのネイティブの可能性はありますか?それともそれが唯一の方法ですか?(おそらく、文字列処理のみを行う小さなモジュールですか?)

4

2 に答える 2

13

それは可能で比較的簡単です。あなたがする必要があるのは、正規表現上のあなたの場所を適切な後方参照と一致させることだけです。

location ~ (sub).(somewhere).(com)/(some)(thing)/(something)(else) {
  set $var1 = $1; # =sub in above example
  set $var2 = $2; # =somewhere in above example
  set $var3 = $3; # =com in above example
  set $var4 = $4; # =some in above example
  set $var5 = $5; # =thing in above example
  set $var6 = $6; # = something in above example
  set $var7 = $7; # = elsein above example
  rewrite ^ $1/$2 last; # would be sub/somewhere
}

rewriteディレクティブはregexpの最初の引数の参照をリセットするため、再書き込みの前に後方参照を保存する必要があります(したがって、try_filesのような他のディレクティブを使用する場合は、それらを保存せずに直接後方参照を使用する必要があります)

于 2012-08-21T17:21:38.357 に答える
1

これは、 Nginxperlモジュールを使用して簡単に実行できます

これを行う別の方法やネイティブモジュールはわかりません。このようなことを行うためにnginx用の独自のモジュールを作成できますが、実際には必要ありません。文字列操作のための非常に単純で高速な場合のPerlモジュール。私は本番環境で同様のタスクにperlモジュールを使用した経験があります。

于 2012-08-21T09:36:29.947 に答える