操纵或拆分字符串

时间:2012-08-21 09:21:05

标签: string variables nginx split

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

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

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

变成了:

subsomethingsomethingelse

然后进一步:

子/ SOM / ETH / ING / SOM / ETH / ING / ELS / E

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

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

(编辑)是否有原生的可能性,包括PERL模块?或者这是唯一的方法吗? (也许是一个只进行字符串处理的较小模块?)

2 个答案:

答案 0 :(得分:12)

这是可能且相对简单的,您需要做的就是将您在regexp上的位置与适当的反向引用相匹配

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,那么你可以直接使用反向引用拯救他们)

答案 1 :(得分:1)

使用Nginx perl module

可以轻松完成此操作

我不知道另一种方式或本机模块来做到这一点。 您可以为nginx编写自己的模块来执行此类操作,但实际上并不是必需的。 Perl模块如果非常简单快速的字符串操作。我有成功使用perl模块进行生产中类似任务的经验。