首页 > 解决方案 > 如何从此 url 中提取整数以进行 nginx 重写?

问题描述

我有一个需要 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
}

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

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

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

标签: regexnginxurl-rewriting

解决方案


直接放在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在重写中

推荐阅读