我有一个快速的问题,如果可能的话,它将为我解决一些问题:

是否可以使用Nginx拆分/操作请求网址?

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

变成:

别的东西

然后进一步进入:

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

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

这有可能吗?否则,究竟将有什么可能?限制在哪里?

(编辑)是否有这样做的本机可能性,包括PERL模块吗?还是唯一的方法? (也许是只进行字符串处理的较小模块?)

最佳答案

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

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
}

您需要在重写之前保存反向引用,因为rewrite指令会将引用重置为regexp第一个参数中的引用(因此,如果您使用其他诸如try_files这样的指令不起作用,那么您可以直接使用反向引用而不保存它们)

09-11 19:16