Nginx: Verstecke Dateien und Ordner nicht ausliefern

Eine eigentlich typische Anforderung: Versteckte Dateien und Ordner (ihnen wird unter Linux ein Punkt (".") vorangestellt) sollen nicht über den Webserver abrufbar sein. Beim Apache ist diese Anforderung standardmäßig für Dateien, die mit ".ht" beginnen, umgesetzt - bei Nginx hingegen überhaupt nicht.

Meine erste Konfiguration, dies zu lösen, sah wie folgt aus:

1
2
3
  location ~ ^(.*)\/\.(.*)$ {
    return 404;
  }

Hier wird geprüft, ob, im Dateinamen ein Slash gefolgt von einem Punkt enthalten ist. Oder anders ausgedrückt: Ob irgendwo eine Datei/ein Ordner im Dateinamen steckt, der mit einem Punkt beginnt. Spannenderweise hat diese Variante einen Harken: Sie funktioniert nicht für Dateien, die sich in einem versteckten Ordner befinden. Warum das so ist, weiß ich persönlich nicht, denn wenn man den gleichen regulären Ausdruck in einem Rewrite verwendet, funktioniert es, wie gewünscht:

1
2
3
4
5
  rewrite ^(.*)\/\.(.*)$ @404 break;

  location = @404 {
    return 404;
  }

Falls also jemand eine Idee hat, warum "location" anders reagiert als "rewrite": Immer her damit! Ich bin auf eure Erklärungen gespannt. :-)
Versteckte Grüße, Kenny