Php NGINX URL重写正则表达式模式不匹配

Php NGINX URL重写正则表达式模式不匹配,php,nginx,url-rewriting,Php,Nginx,Url Rewriting,经过一番努力,我取得了一些进步 if ($query_string) { rewrite /([^.]+)$ /$1.php$is_args$args break; } 日志返回 2020/10/31 14:51:17 [notice] 442849#0: *1 "/([^.]+)$" matches "/course/dfdfdf/dfsdfdsf&q

经过一番努力,我取得了一些进步

                if ($query_string) {
                        rewrite /([^.]+)$ /$1.php$is_args$args break;
                }
日志返回

2020/10/31 14:51:17 [notice] 442849#0: *1 "/([^.]+)$" matches "/course/dfdfdf/dfsdfdsf", client: 220.255.213.94, server: xxx.com, request: "GET /course/dfdfdf/dfsdfdsf?dsfdsf=xxx HTTP/1.1", host: "xxx.com'
但重写仍然没有发生。有什么线索吗


我目前正在将一个php应用程序从Apache移植到Nginx。希望在url重写方面得到一些帮助

我正在尝试将/xxx?param=value重写为/xxx.php?param=value

rewrite /^([^.]+)\? /$1.php$is_arg$args last;
此重写代码位于服务器块中,因为子目录中也有这样的模式需要捕获

NGINX没有捕捉到这种模式。有人能提供建议吗


谢谢

rewrite
指令与不包含查询字符串部分的规范化URI一起工作,
\?
regex部分是您的模式永远不会匹配任何请求的原因。此外,
rewrite/([^.]+)$/$1.php$是_args$args break/course/dfdfdfdfdf/dfsdsf?dsfdsf=xxx
请求中的code>将为您提供
/dfsdsf.php?dsfdsf=xxx
,而不是
/course/dfdfdfdfdf/dfsdsf.php?dsfdsf=xxx
。还有一件事,通过
rewrite
指令进行重写时,不需要将查询字符串附加到重写的URI以保留查询参数。但是,当您使用
返回
指令时,需要执行此操作。此外,我建议您检查或回答。谢谢。我们将查看2个链接。你的建议非常有用。对不起,我错了,
rewrite/([^.]+)$/$1.php$is_args$args break/course/dfdfdfdf/dfsdsf?dsfdsf=xxx
请求中,code>不会给您
/dfsdsf.php?dsfdsf=xxx
$1
捕获变量的值将如您所期望的那样为
/course/dfdfdf/dfsdsf
。但无论如何,同样的事情也可以通过更简单的
重写^$uri.php中断来实现规则。