3

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

是否可以使用 nginx 拆分/操作请求 URL?

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

变成:

其他东西

然后进一步进入:

子/som/eth/ing/som/eth/ing/els/e

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

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

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

4

2 回答 2

13

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

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 不这样做,您可以直接使用反向引用而不保存它们)

于 2012-08-21T17:21:38.357 回答
1

这可以通过使用Nginx perl 模块轻松完成

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

于 2012-08-21T09:36:29.947 回答