动态URL的NGINX重写规则

动态URL的NGINX重写规则,url,nginx,url-rewriting,Url,Nginx,Url Rewriting,我想知道如何为nginx编写正确的重写,因为它每次都失败 我有一个页面,可以在没有任何操作()的情况下访问,也可以在url中使用一个参数来触发操作()。参数应始终为数字。如果可能,如果没有给出参数,结束斜杠应该是可选的。 这就是我尝试的: location /praemienshop { rewrite ^/praemienshop(|/)([0-9]+/.*?)?$ /index.php?url=praemienshop&item=$1; } 我可以打开foo.bar

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

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

location /praemienshop {
        rewrite ^/praemienshop(|/)([0-9]+/.*?)?$ /index.php?url=praemienshop&item=$1;
}
我可以打开foo.bar/praemienshop,但每次我打开foo.bar/praemienshop/3(或任何其他数值),它都会抛出一个404 not found

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


感谢您的帮助。

由于您目前使用的捕获错误,而且正则表达式与URI不匹配。尝试:

rewrite ^/praemienshop(?:/([0-9]+))?$ /index.php?url=praemienshop&item=$1;
在上面的正则表达式中,
(?:
是非捕获组


请参阅。

$1
是第一个捕获
(|/)
-您应该尝试
$2
。感谢您的帮助Richard。但这并不能解决它。如果我添加一个数字(例如:foo.bar/praemienshop/3),它仍然会抛出404。非常感谢,这很有魅力!关于regex,我还有很多东西要学习;-)我还有一个问题Richard,我如何重写一个url,如果用户输入一个以.gif结尾的url,.gif将被删除,文件名将在参数中重写,就像上面的示例一样?像
^(.*)\.gif$
这样的构造将捕获URI减去扩展名。