我有一个简单的问题,如果可能的话,这会解决我的一些问题:
是否可以使用nginx分割/操作request-url?
我的意思是:这样的网址:sub.somewhere.com/something/somethingelse
变成了:
subsomethingsomethingelse
然后进一步:
子/ SOM / ETH / ING / SOM / ETH / ING / ELS / E
然后给定路径用于检索文件(因此可能必须将其存储在可以重复使用或直接使用的变量中)
这有可能吗?或者如果不是,那究竟是什么可能,以及限制在哪里?
(编辑)是否有原生的可能性,包括PERL模块?或者这是唯一的方法吗? (也许是一个只进行字符串处理的较小模块?)
答案 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模块如果非常简单快速的字符串操作。我有成功使用perl模块进行生产中类似任务的经验。