fragen stichworte

Nginx Top Directory-Name aus Anforderungs-URI extrahieren

Ich möchte in der Lage sein, das oberste Verzeichnis von $request_uri zu verwenden, zum Beispiel:

/dir/sub/slug -> /dir

Ich habe die Antwort auf diese Frage gelesen: So extrahieren Sie nur den Dateinamen aus der Anforderung 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;
}

Und es scheint nahe dran zu sein, was ich brauche, wie funktioniert das? Ist es möglich, geändert zu werden, um stattdessen das oberste Verzeichnis zu erhalten? Vielen Dank!

antworten

Ich denke, dass so etwas den Trick tun sollte.

In meinem Beispiel habe ich zum Testen der zurückgegebenen Daten die Variable $topdir in den Header eingefügt.

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 sollte /dir/

  • zurückgeben
  • http://mydomain.com oder http://mydomain.com/page.html sollten nichts

  • zurückgeben