Ich installiere WordPress auf meinem Ubuntu-Server, auf dem nginx ausgeführt wird. Die Installation verlief ziemlich reibungslos (folgende LEMP installieren und WordPress installieren Tutorials – führte mich durch mysql, php5-fpm und WordPress-Setup) und scheint meistens zu funktionieren. Ich kann die WordPress-Admin-Seite anzeigen, Blog-Posts erstellen und diese Posts sogar anzeigen. Aber wenn ich versuche, auf die Homepage meines Blogs zuzugreifen (z. B. index.php), dient nginx der Datei als Download, anstatt sie auszuführen. Ich habe bereits die Konfigurationen in Nginx ausprobiert, die .php-Dateien als Downloads bereitstellt, anstatt sie auszuführen, ohne Erfolg.
Hier ist meine virtuelle Serverdatei:
server {
listen 80;
server_name my.domain.com;
root /my/wordpress/home/dir;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php?$args;
rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ redirect;
if (-e $request_filename) {
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 break;
}
rewrite ^/([_0-9a-zA-Z-]+/)?(.*\.php)$ /$2 break;
rewrite ^(.*)$ /index.php break;
}
}
Und nginx.conf:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Aus Gründen der Übersichtlichkeit habe ich kommentierte Zeilen entfernt. sudo nginx -t
meldet keine Fehler.
Wie kann ich index.php dazu bringen, ausgeführt zu werden, anstatt als Download bereitgestellt zu werden? Danke für Ihre Hilfe.
Bearbeiten: Sieht so aus, als wäre es ein Browser-Caching-Problem. Ich habe versucht, zwischengespeicherte Daten der letzten 24 Stunden zu löschen, aber es hat nichts geändert. Nach dem Löschen alles Es wird jetzt ordnungsgemäß geladen, anstatt herunterzuladen. Es lädt auch auf anderen Browsern/Computern problemlos.
Was ist der Zweck der
rewrite
Regeln und dieif
. Das ist kein Standard und verursacht große Konflikte mit Ihnentry_files
Regel.– Richard Smith
17. Januar 2016 um 21:44 Uhr
Dies ist die nginx-Übersetzung der Konfiguration, die WordPress mir zum Hinzufügen sagte. Können Sie erklären, was der Konflikt ist? Nginx passt am längsten
location
möglich, also jede URL mit der Endung.php
sollte vom ersten Block behandelt werden. Ich denke, das bedeutet, dass ein paar Zeilen aus dem 2. Block nicht verwendet werden, aber ich sehe nicht, warum dies Probleme verursachen würde. Ich bin neu bei nginx, also bitte erklären.– tytk
19. Januar 2016 um 6:17 Uhr
Das erste Problem, das ich sehe, ist
rewrite ^(.*)$ /index.php break;
die, wenn sie ausgelöst wird, die Ausführung der PHP-Datei verhindern würde (siehebreak
hier). Das zweite Problem ist-e $request_filename
das ist eine alte Art der Implementierungtry_files
. Eine Ressource für die Implementierung von WordPress aufnginx
ist hier.– Richard Smith
19. Januar 2016 um 8:56 Uhr
Danke @RichardSmith!! Ihr zweiter Link war genau die Konfiguration, die ich brauchte, und brachte mein Multisite-Setup zum Laufen. Alle anderen Blogs/Dokumentationen/Forenbeiträge, die ich gelesen hatte, stammten von vor vielen Jahren … Ich bin froh, dass die Nginx-Leute ihre eigene Anleitung für WordPress geschrieben haben.
– tytk
24. Januar 2016 um 7:15 Uhr