动态URL的NGINX重写规则

时间:2017-04-21 16:51:56

标签: url nginx url-rewriting

我想知道如何为nginx编写正确的重写,因为它每次都会失败。

我有一个页面可以在没有任何操作(http://foo.bar/praemienshop/)的情况下访问,也可以在url中使用参数触发操作(http://foo.bar/praemienshop/1)。参数应始终为数字。如果可能,如果没有给出参数,则结束斜杠应该是可选的。 这就是我的尝试:

location /praemienshop {
        rewrite ^/praemienshop(|/)([0-9]+/.*?)?$ /index.php?url=praemienshop&item=$1;
}

我可以打开foo.bar/praemienshop,但每次打开foo.bar/praemienshop/3(或任何其他数值)时,它只会抛出404找不到。

我既不擅长写regexp,也不完全理解nginx中的重写是如何工作的。我让它在IIS中工作,但是以某种方式将它导入nginx非常困难。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正如您目前所拥有的那样,您使用了错误的捕获,并且正则表达式与URI不匹配。尝试:

rewrite ^/praemienshop(?:/([0-9]+))?$ /index.php?url=praemienshop&item=$1;

在上面的正则表达式中,(?:是非捕获组。

请参阅this useful resource on regular expressions