【问题标题】:nginx rewrite two url segmentsnginx重写两个url段
【发布时间】:2017-06-12 16:08:37
【问题描述】:

我几乎可以使用它,只是无法将它弄到最后一英寸。

我想做的是

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

让它去

https://example.com/ap/index.php?server=$1&guild=$2

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

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,有没有办法让我的蛋糕也吃掉,我在这里错过了什么

【问题讨论】:

    标签: php nginx url-rewriting


    【解决方案1】:

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

    但如果捕获的目的不是捕获/,则应改用[^/] 字符类。例如:

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

    尾随 / 也已设为可选。有关正则表达式,请参阅 this useful resource

    【讨论】:

    • 你是最棒的!我唯一需要做的就是用引号括起来 rewrite "^/ap/([^/]*)/([^/]*)/?$" "/ap/index.php?server=$1&guild=$2" last;
    • nginx 不需要引号,除非涉及大括号。我认为这是您的部署系统的限制。
    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多