Nginx重写将查询字符串转换为路径


11

我想要这个简单的重写规则:

/somefolder/mypage.aspx?myid=4343&tab=overview

重定向到:

/folder/4343/overview/

我在寻找一些解决方案,但没有一个真正起作用。

我试过了:

rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

我究竟做错了什么?我要404

(简单的规则就可以了。)

谢谢

Answers:



32

Valery Viktorovsky答案的更简短版本。

location = /somefolder/mypage.aspx {
    if ($arg_tab != overview) { return 404; }
    if ($arg_myid !~ "^\d+$") { return 404; }
    rewrite ^ /folder/$arg_myid/overview? permanent;
}

或者,嘿,如果您不需要验证参数,它甚至可以更短:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;

希望您早些发布它:)它将节省我一些时间
YardenST 2013年

大声笑。你有很多这样的规则吗?好吧,迟到总比没有好!另外,我可以接受吗?:)
cnst 2013年

Valery解决方案的工作原理是:),可能只有一个答案:)
YardenST 2013年

9
meta.stackexchange.com/questions/5234/… « 确保除了为您工作之外,答案确实是很好的做法。有时,答案被接受后,又有一个答案出现,揭露了以前的答案实际上是一个糟糕的hack。»认真地讲,Valery的答案不仅有一个,而且还有几个不同的问题!除了花括号,每一行本质上都是错误的!
cnst 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.