Nginx 变量中 Uri 的一部分

bro*_*did 3 rewrite nginx

我想将 nginx 中 URI 的一部分放入变量中。目前我有这条规则。

if ( !-e /tmp/access_22092012_$cookie_PHPSESSID.tmp ) {
        rewrite /folder1/folder2/(.*) /folder1/folder1.php?file=$1 last;
}
Run Code Online (Sandbox Code Playgroud)

请求就像

http://my.domain/folder1/folder2/22092012/index.html

http://my.domain/folder1/folder2/22092012/files/x.sfw

其中22092012也可以有其他数字。

我想22092012从 URL 中提取部分并将其放入变量中,然后文件中的内容存在上面的条件:

if ( !-e /tmp/access_$urlpart_$cookie_PHPSESSID.tmp ) {
        rewrite /folder1/folder2/(.*) /folder1/folder1.php?file=$1 last;
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要这个:我设置了登录保护来通过会话登录来保护文件。我的应用程序写入 tmp 文件,因此如果文件夹中有 100 个文件,则脚本不需要验证每个文件是否具有权限,也不需要为每个文件运行 php 工作程序。

这可能吗?

sen*_*nfo 5

是的 - 您可以在 中使用带有“捕获”的正则表达式location,并在location块中引用它们,如下所示:

location ~ /folder1/folder2/(.*)/ {
    if ( !-e /tmp/access_$1_$cookie_PHPSESSID.tmp ) { ... }
}
Run Code Online (Sandbox Code Playgroud)