Wie statische Dateien von einem bestimmten Verzeichnis auf einer über Nginx ausgeführten WordPress-Site bereitgestellt werden

377
Dave

Ich habe eine WordPress-Site, die auf Nginx läuft. In meiner Konfiguration habe ich einen Standortblock wie folgt:

location / { try_files $uri $uri/ /index.php?$args; } 

Ich möchte ein spezielles Verzeichnis mit statischem Inhalt haben. Wenn eine URL mit einer Datei im statischen Verzeichnis übereinstimmt, möchte ich, dass sie anstelle des Wordpress-Inhalts bereitgestellt wird.

Ich kann die Namen der Dateien nicht im Voraus kennen.

Ich habe versucht, meinen Standortblock in zu ändern

location / { try_files /static/$uri /static/$uri/ $uri $uri/ /index.php?$args; } 

Meistens tut das, was ich will (solange staticein Verzeichnis darunter ist $document_root), aber es schreibt die URL neu, die der Besucher sieht. Ich möchte das möglichst vermeiden. Vermeiden Sie z. B. eine https://example.com/catalog.phpWeiterleitung zu https://example.com/static/catalog.php. Ich möchte nur, dass Nginx den Inhalt statisch bereitstellt, ohne dass der Besucher dies weiß.


Ich war vielleicht nicht besonders klar.

Mein WordPress-Inhalt befindet sich in /srv/www/mysite/htmlund meine Nginx-Konfiguration sieht ungefähr so ​​aus:

server { root /srv/www/mysite/html;  location / { try_files $uri $uri/ /index.php?$args; } } 

Ich habe einen anderen Ordner /home/dave/staticmit beliebigem Inhalt. Angenommen, es hat eine Datei namens catalog.html. Wenn ein Besucher besucht https://example.com/catalog.html, möchte ich, dass der Inhalt /home/dave/static/catalog.htmlgeliefert wird. Wenn es keine passende statische Datei gibt, möchte ich auf den Inhalt von WordPress zurückgreifen.

Hier ist etwas anderes, was ich inzwischen ausprobiert habe:

server { root /srv/www/mysite/html;  location / { root /home/dave/static; try_files $uri $uri/ @fallback; } location @fallback { try_files $uri $uri/ /index.php?$args; } } 

Diese Konfiguration funktioniert nicht. Es scheint keinen der statischen Inhalte zu erkennen und dient nur WordPress-Inhalten.

0
Verwenden Sie die Ortsangaben von Nginx, um einen Ort zu definieren, der davon abhängt, wie die URL aussieht. ZB `Standort / statisches `und dann Ihr` location / ` Kinnectus vor 5 Jahren 1
@Kinnectus Muss der Besucher nicht zu example.com/static/file navigieren? Ich möchte, dass der Besucher zu example.com/file navigiert, aber ich möchte, dass der Inhalt des statischen Verzeichnisses bereitgestellt wird, wenn er vorhanden ist Dave vor 5 Jahren 0
Sie haben einige `/` s an der falschen Stelle. Versuchen Sie: `try_files / static $ uri $ uri $ uri / /index.php? $ Args;` Richard Smith vor 5 Jahren 0
@ RichardSmith Danke. Ich habe vergessen, den anfänglichen Schrägstrich in meine Frage aufzunehmen. Ich hatte es in meiner Konfig. Du hast recht, dass der Schrägstrich nach "static" falsch war. Leider leitet diese Konfiguration den Besucher immer noch physisch in das Verzeichnis / static um, anstatt nur Inhalte von dort aus bereitzustellen. Dave vor 5 Jahren 0
Verfügen Sie über die richtigen Berechtigungen für die Dateien im statischen Verzeichnis und über den korrekten Zugriff des Nginx-Workers auf die darüber liegenden Verzeichnisse? Sie geben das Betriebssystem nicht an, einige (z. B. Centos) verfügen jedoch über zusätzliche Zugriffskontrollen. Richard Smith vor 5 Jahren 0
@ RichardSmith Ich glaube, es hat die gleichen Rechte, Rechte und Selinux-Sicherheitskontexte wie das WordPress-Verzeichnis. Der Benutzer 'nginx' kann das Verzeichnis statisieren. Ich habe auch versucht, `/ srv / www / mysite / static 'so zu verwenden, dass es dasselbe übergeordnete Verzeichnis verwendet. Dave vor 5 Jahren 0
Offensichtlich gibt es einen `location ~ \ .php $` - Block, aber es gibt auch andere Speicherorte für reguläre Ausdrücke, die mit den Dateien im Ordner `static` in Konflikt stehen können. Richard Smith vor 5 Jahren 0
@ RichardSmith Das war es. Ich hatte zusätzliche Regeln wegen eines Caching-Plugins. Sie mischten sich ein, was ich versuchte. Dave vor 5 Jahren 0

0 Antworten auf die Frage