简化正则表达式,可能很简单

时间:2015-08-12 16:40:19

标签: regex mod-rewrite nginx url-rewriting

我试图在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;

这可能是愚蠢的事情,但它不起作用,任何想法?

1 个答案:

答案 0 :(得分:1)

  

重写^ /(。)/(q - (。)/)?$ /index.php?cat=$1&q=$2 last;

您需要使用如下模式:

^/([^/]*)/(q-(.*)/)?$

现在q参数的值在$3中,而不是$2(因为附加括号后的子模式。

模式的第一部分也需要非贪婪,因为模式的最后部分现在是可选的。默认情况下,.*贪婪并使用整个字符串。通过指定.*?或使用否定的字符类[^/]*(正如我所做的那样),可以使它变得非贪婪。 *应该更改为+,除非你真的可以有空参数。

但是@ndn有一个有效点,它现在可能是一个指令而不是两个,但它是简化吗?不是真的。