Назад | Перейти на главную страницу

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;
}

И это похоже на то, что мне нужно, как это работает? можно ли изменить, чтобы вместо этого получить верхний каталог? Спасибо!

Я думаю, что что-то вроде этого должно помочь.

В моем примере, чтобы проверить, что было возвращено, я добавил переменную $topdir в заголовок.

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 не должен ничего возвращать