我想知道如何为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非常困难。
感谢您的帮助。
答案 0 :(得分:1)
正如您目前所拥有的那样,您使用了错误的捕获,并且正则表达式与URI不匹配。尝试:
rewrite ^/praemienshop(?:/([0-9]+))?$ /index.php?url=praemienshop&item=$1;
在上面的正则表达式中,(?:
是非捕获组。