将“/ A / B”的规则改写为“/ B?id = A”

时间:2012-08-31 07:11:20

标签: regex nginx rewrite query-string

我正在尝试重写以下网址:

example.com/[name1]/[name2]

为:

example.com/[name2].htm?id=[name1]

我正在尝试这个重写规则:

rewrite ^/(\d+)/(.+)/ /$2?id=$1 last; 

但似乎确实有效。有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

你忘记了重写中的.htm

正如regexp所假设的那样,name1总是由所有数字组成是否正确?

更新:

location ~ ^/([A-Za-z0-9]+)/(.+)/$ {
  rewrite ^/([A-Za-z0-9]+)/(.+)/ /$2.htm?id=$1 last; 
}

基本上我们在这里做的是:

  • 我们匹配该位置的正则表达式,这会选择我们要重写的网址
  • 在位置块中我们然后进行重写

(注意:我们需要重复正则表达式,因为重写指令会重置$ 1和$ 2反向引用的内容,如果我们在其他地方执行其他操作,我们可以直接在位置块内使用它们)