2016-05-31 29 views
0

これは可能かもしれないし、そうではないかもしれないが、私は尋ねると思った。Nginx - 複数のパラメータを書き直す

最近、クエリパラメータの一部が変更され、以前のバージョンを新しいバージョンにリダイレクトする301ことを希望しました。

古いパラメータ体系はcategoryX=Yであり、Xはいくつかの番号であり、Yはいくつかの番号(例:category56=112)です。新しいバージョンではXが削除されており、category=112となっています。これは、既知の数のパラメータまたは単一のパラメータのいずれかが存在する場合には、かなり単純に思えます。しかしながら、これらのパラメータの可変数が存在し得る。たとえば:

http://www.example.com/some_directory/index.shtml?category56=112 
http://www.example.com/some_other_directory/index.shtml?category8=52&category11=2&other_param=12 

私はパラメータを通って、正規表現はcategory=(0-9+)に変更するcategory(0-9+)=(0-9+)と一致した場合、「それぞれの」と基本的に方法はありません推測していますか?

+0

ではなく、あなたのアプリケーションでそれを行います。はるかに簡単です。 –

+0

さて、私はアプリの中でやっているように思っています。私が何かを明らかにしていないことを確認したい。 –

答えて

0

argsをループすることはできますが、Openrestyバンドルの一部でもあるサードパーティのNginx Luaモジュールが必要です。代わりにそれと

、これらの線に沿って何かが仕事をする必要があります...

location /foo { 
    rewrite_by_lua ' 
     local new_args = "exit" 
     local exit = false 
     local m, err = nil 
     -- load arguments 
     local args = ngx.req.get_uri_args() 

     -- loop through arguments and rebuild 
     for key, val in pairs(args) do 
      -- stop loop if "abort" arg is found 
      if key == "exit" then 
       exit = "true" 
       break 
      end 
      m, err = ngx.re.match(key, "category(0-9+)") 
      if m then 
       new_args = new_args .. "&category=" .. val 
      else 
       new_args = new_args .. "&" .. key .. "=" .. val 
      end 
     end 

     -- redirect if we have not been here before 
     if exit == "false" then 
      return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.request_uri .. ngx.var.isargs .. new_args) 
     end 
    '; 
} 
+0

ありがとう、私は現在、そのモジュールを利用できるとは思わないが、私たちがそれを使用できるかどうかを見てみる。 –

関連する問題