我试图在nginx上简化一个简单的正则表达式,但它不起作用,
这是我的第一个:
rewrite ^/(.*)/q-(.*)/$ /index.php?cat=$1&q=$2 last;
rewrite ^/(.*)/$ /index.php?cat=$1 last;
参数q
是可选的,我想写一个正则表达式,
我试过了:
rewrite ^/(.*)/(q-(.*)\/)?$ /index.php?cat=$1&q=$2 last;
这可能是愚蠢的事情,但它不起作用,任何想法?
答案 0 :(得分:1)
重写^ /(。)/(q - (。)/)?$ /index.php?cat=$1&q=$2 last;
您需要使用如下模式:
^/([^/]*)/(q-(.*)/)?$
现在q
参数的值在$3
中,而不是$2
(因为附加括号后的子模式。
模式的第一部分也需要非贪婪,因为模式的最后部分现在是可选的。默认情况下,.*
将贪婪并使用整个字符串。通过指定.*?
或使用否定的字符类[^/]*
(正如我所做的那样),可以使它变得非贪婪。 *
应该更改为+
,除非你真的可以有空参数。
但是@ndn有一个有效点,它现在可能是一个指令而不是两个,但它是简化吗?不是真的。