nginx重写两个url段

时间:2017-06-12 02:25:47

标签: php nginx url-rewriting

我几乎可以工作,只是不能把它弄到最后一寸。

我想做的是

https://example.com/ap/variable1/variable2/

然后转到

https://example.com/ap/index.php?server= $ 1和;公会= $ 16

其中变量是可选的。我现在拥有的是

location /ap/ {
    rewrite "^/ap/(.*)/(.*)$" "/ap/index.php?server=$1&guild=$2" last;
}

这主要是有效的,如果我使用结束斜杠转到url它会使变量合为一个而没有它,它加载就好了。

如果我将规则更改为

location /ap/ {
    rewrite "^/ap/(.*)/(.*)/$" "/ap/index.php?server=$1&guild=$2" last;
}

我在尝试转到第一个变量时得到404,有没有办法让我的蛋糕也吃掉它,我在这里缺少什么

1 个答案:

答案 0 :(得分:0)

第一次捕获是贪婪的,这意味着它将捕获到最后/的所有内容(而不是您想要的第一个/)。您可以使用*?代替*来使捕获变得非贪婪。

但是如果捕获不是为了捕获/,则应该使用[^/]字符类。例如:

rewrite ^/ap/([^/]*)/([^/]*)/?$ /ap/index.php?server=$1&guild=$2 last;

尾随/也已成为可选项。有关正则表达式的信息,请参阅this useful resource