如何简化和缩短这些NGINX重写规则?
我有以下NGINX重写规则:如何简化和缩短这些NGINX重写规则?,nginx,url-rewriting,Nginx,Url Rewriting,我有以下NGINX重写规则: rewrite ^/([^/]+)/?$ /page.php?a=$1 last; rewrite ^/([0-9]+)/?$ /page.php?b=$1 last; rewrite ^/(a|b)/?$ /page.php?c=$1 last; rewrite ^/([^/]+)/([0-9]+)/?$ /page.php?a=$1&b=$2 last; rewrite ^/([^/]+)/(a|b)/?$ /page.php?a=$1&c=$
rewrite ^/([^/]+)/?$ /page.php?a=$1 last;
rewrite ^/([0-9]+)/?$ /page.php?b=$1 last;
rewrite ^/(a|b)/?$ /page.php?c=$1 last;
rewrite ^/([^/]+)/([0-9]+)/?$ /page.php?a=$1&b=$2 last;
rewrite ^/([^/]+)/(a|b)/?$ /page.php?a=$1&c=$2 last;
rewrite ^/([^/]+)/([0-9]+)/(a|b)/?$ /page.php?a=$1&b=$2&c=$3 last;
如您所见,页面可以具有以下参数:
或a
或b
c
a
和
b
或
a
和
c
和a
和b
c
NGINX
需要处理这样的重写规则方案
我想知道如何简化这组规则,如果可能的话,它是如何工作的。如果您的应用程序对空参数感到满意,您可以将每个捕获(及其前导的
/
)设置为可选的
例如:
rewrite ^(?:/([^/]+))?(?:/([0-9]+))?(?:/(a|b))?/?$ /page.php?a=$1&b=$2&c=$3 last;
非捕获组(?:)
以及尾随的?
使其成为可选组,并包含前导的/
和一个捕获
您需要防止的一个副作用是,三个捕获都丢失了,即根URI/
请参阅非捕获组。我从未理解
(?:)
tbh的用法,它与通常的(
)有什么不同?我尝试了与您编写的相同的RegEx
,但没有?:
,它的工作原理与使用它的工作原理相同,但这里有什么不同?除此之外,该规则运行良好。使用非捕获组避免将它们分配给$
变量。如果改用()
,这只意味着重写后的查询字符串将变为?a=$2&b=$4&c=$6
我现在明白了,在尝试之后,我想问,如果我不需要空参数,如何防止空参数?