Nginx的直接“fgrep”风格redirect

我有一堆“redirect规则”,我希望Nginx为我做这个看起来像这样的:

/news/?p=12312 ---> /news/some/new/url.html /news/?p=12fsd312 ---> /news/some/new/url.html 

我怎样才能让Ngnix将任何访问/news/?p=12312人redirect到/news/some/new/url.html

我努力了

 rewrite ^/news/?p=123$ /news/some/new/url.html last; 

但似乎并不奏效。

事实是Nginx认为所有的东西都是在? 作为查询string,而不是作为URI的一部分。

我会做的是比较query_string值来触发redirect。 像这样的东西:

 server { root /var/www; index index.html; if ($arg_p = 12312) { rewrite ^ /news/some/new/url.html break; } if ($arg_p = 12fsd312) { rewrite ^ /news/some/new/url.html break; } } 

请注意,我使用了$arg_p因为你的参数是p=123456 。 对于像donaldDuck=123456这样的参数,你将不得不使用$arg_donaldDuck (希望我很清楚)。

更准确地说: $arg_X其中X是参数的名称。