【问题标题】:How can I extract the integers from this url for nginx rewrite?如何从此 url 中提取整数以进行 nginx 重写?
【发布时间】:2020-01-11 08:28:39
【问题描述】:

我有一个需要 nginx 解释和重写的 url。

我对 nginx 配置没问题,但我一点也不擅长使用正则表达式。

典型的 URL 如下所示:

/open/M-100_L-200_N-300_I-400.jpg

而且需要改写成这样:

/open.php?M=100&L=200&N=300&I=400

我怀疑它会像......

location /open/ {
rewrite ^/open/M-([0-9]+)_L-([0-9]+)_N-([0-9]+)_I-([0-9]+) /open.php?M=$1&L=$2&N=$3&I=$4
}

请注意,这些值将始终是不同长度/大小的整数。

这只是匹配整个文件名,而不是其中的单个值。

再一次,我的问题是我不擅长使用正则表达式,真的应该花一些时间来理解它。

【问题讨论】:

  • 它在 JS 中工作:regex101.com/r/txGIb2/1。我从来没有在 Nginx 中使用过正则表达式,也许你需要一个反斜杠来逃避正斜杠?
  • 您在rewrite 语句之后缺少;,但除此之外,它对我有用。

标签: regex nginx url-rewriting


【解决方案1】:

直接放入server 上下文并使用\d 表示数字更容易:

server {
    ...
    rewrite "^/open/M-(\d+)_L-(\d+)_N-(\d)+_I-(\d)+.jpg$" /open.php?M=$1&L=$2&N=$3&I=$4 last;
    ...
}
  • \d = 个位数
  • + = 多个,所以\d+ 是可变长度整数
  • () 用于捕获,以便匹配可用,例如$1在重写

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多