Nginx 从请求 URI 中提取顶级目录名称

Nginx 从请求 URI 中提取顶级目录名称

我需要能够使用顶级目录$request_uri,例如:

/dir/sub/slug->/dir

我读了这个问题的答案: 如何从请求 uri 中提取文件名

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

它似乎与我需要的很接近,它是如何工作的?是否可以修改以获取顶级目录?谢谢!

答案1

我认为这样的事情应该可以解决问题。

在我的示例中,为了测试返回的内容,我将变量添加$topdir到了 Header 中。

map $request_uri $topdir {
   ~(?<captured_topdir>^/[a-zA-Z0-9]+[/]) $captured_topdir;
}

server {
  listen  80;
  root /var/www;
  index  index.html;

  location / {
    add_header X-Top-Dir $topdir;
  }
}
  • http://mydomain.com/dir/sub/slug/page.html应该返回/dir/

  • http://mydomain.com或者http://mydomain.com/page.html应该不返回任何内容

相关内容