nginx – Permalinks mit .php in URL funktioniert nicht

Ich verschiebe eine Site von einem Apache-Server auf einen Nginx-Server. Viele Seiten haben am Ende des Permalinks eine .php-Erweiterung. Der Versuch, diese Seiten anzuzeigen, führt zu einem Nginx 404 Not Found. Diese Seiten funktionierten jedoch auf Apache einwandfrei. Hier ist die Serverblockkonfiguration für die Site:

# Vhost Config: example.com server { root /var/www/vhosts/sites/www.example.com/web; index index.php index.html index.htm; server_name example.com www.example.com; port_in_redirect off; location /Denied { return 403; } location / { try_files $uri $uri/ /index.php?$args; } location ~* ^(/sitemap).*(\.xml)$ { rewrite ^ /index.php; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location = /404.html { root /usr/share/nginx/html; } location ~ ^/.*\.php$ { try_files $uri = 404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|xml)(\?ver=[0-9.]+)?$ { expires 1w; log_not_found off; } location ~ /\. { deny all; } location = /ping.html { access_log off; } } 

Ich habe auskommentiert “#try_files $ uri = 404;” um zu sehen, ob das aber funktionieren würde, was zu einer “Datei nicht gefunden” führte. Botschaft.

Das Hauptproblem ist also, WordPress und nginx dazu zu bringen, den Permalink mit einer .php-Erweiterung zu sehen, bevor er versucht, eine .php-Datei auszuführen, die keine echte Datei ist.

Ist das möglich?

Solutions Collecting From Web of "nginx – Permalinks mit .php in URL funktioniert nicht"

Ich habe mich verändert

 location ~ ^/.*\.php$ { try_files $uri = 404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } 

zu

 location ~ ^/.*\.php$ { try_files $uri $uri/ /index.php?$args; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } 

Es funktioniert jetzt, aber ich denke, das ist jetzt ein Sicherheitsproblem.

Das klingt wie ein Pfadinfo-Problem.

http://wiki.nginx.org/PHPFcgiExample

  location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } 

Das kann dich hoffentlich in die richtige Richtung lenken.