
Ich erstelle eine Anwendung, bei der einige Dateien von der App selbst bereitgestellt werden. Ich bin nicht gut darin, serverseitige Dinge zu konfigurieren, daher sieht meine Nginx-Konfiguration folgendermaßen aus:
location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
try_files $uri $1.$3;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|txt)$ {
access_log off;
expires 30d;
root /var/www/domain_tld/public;
}
Ich weiß, dass die zweite Regel dazu dient, die aufgelisteten Erweiterungen direkt von nginx aus bereitzustellen, und das ist cool, aber ich hätte gerne eine Regel, die besagt:
/data/photos/{string}/{name}.{extension}
Vielen Dank im Voraus
Antwort1
Ich gehe davon aus, dass Sie einen Standort-URI wie (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$
für eine folgende Datei serverseitig bereitstellen möchten /data/photos/$1/$2.$3
.
Dann ist es so einfach wie das (beachten Sie, dass ich den regulären Ausdruck leicht geändert habe. Möglicherweise lässt er sich verbessern, indem alle Fälle, die so nah wie möglich beieinander liegen, auf die Whitelist gesetzt werden):
location ~* ^/(?<string>.+)\.(?<name>\d+)\.(?<extension>js|css|png|jpg|jpeg|gif)$ {
root /data/photos;
try_files $string/$name.$extension =404;
}
Ein Aufruf der /myString.file.ext
URI liefert Inhalte von/data/photos/myString/file.ext
Beachten Sie, dass alle Nginx-Standorte mit beginnen /
.
Denken Sie auch daran, dass jede Anfrage bearbeitet wird voneinzigerStandort, daher möchten Sie möglicherweise Ihre beiden zusammenführen, wenn sie gleichzeitig auf die Anfragen angewendet werden sollen.