【问题标题】:Manipulate or split string操作或拆分字符串
【发布时间】:2023-03-14 15:09:01
【问题描述】:

我有一个简单的问题,如果可能的话,这将解决我的一些问题:

是否可以使用 nginx 拆分/操作 request-url?

我的意思是:这样的网址:sub.somewhere.com/something/somethingelse

变成:

subsomethingsomethingelse

然后进一步进入:

sub/som/eth/ing/som/eth/ing/els/e

然后使用给定的路径来检索文件(因此很可能,它必须存储在可以重复使用或直接使用的变量中)

这有可能吗?或者如果不是,究竟有什么可能,限制在哪里?

(编辑)是否有本地的可能性来做到这一点,包括 PERL 模块?或者这是唯一的方法? (也许是一个只做字符串处理的小模块?)

【问题讨论】:

    标签: string variables nginx split


    【解决方案1】:

    这是可能的并且相对容易,您需要做的就是将您在正则表达式上的位置与适当的反向引用相匹配

    location ~ (sub).(somewhere).(com)/(some)(thing)/(something)(else) {
      set $var1 = $1; # =sub in above example
      set $var2 = $2; # =somewhere in above example
      set $var3 = $3; # =com in above example
      set $var4 = $4; # =some in above example
      set $var5 = $5; # =thing in above example
      set $var6 = $6; # = something in above example
      set $var7 = $7; # = elsein above example
      rewrite ^ $1/$2 last; # would be sub/somewhere
    }
    

    您需要在重写之前保存反向引用,因为重写指令会将引用重置为正则表达式第一个参数中的引用(因此,如果您使用其他一些指令,例如 try_files 不这样做,您可以直接使用反向引用而不保存它们)

    【讨论】:

      【解决方案2】:

      这可以通过Nginx perl module轻松完成

      我不知道其他方式或本地模块可以做到这一点。 你可以编写自己的模块让 nginx 做这样的事情,但实际上没有必要。 Perl 模块如果非常简单快速地进行字符串操作。我有在生产中使用 perl 模块完成类似任务的成功经验。

      【讨论】:

      • 是的,这是我通过谷歌搜索找到的解决方案 - 我想知道是否有本地解决方案?我读过 perl 模块非常大,对于单个字符串操作来说这有点过头了。还是我错了?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多