it-swarm.com.de

nginx - Permalinks mit .php in der URL funktionieren nicht

Ich verschiebe eine Site von einem Apache-Server auf einen Nginx-Server. Viele der Seiten haben eine .php-Erweiterung am Ende des Permalinks. Der Versuch, diese Seiten anzuzeigen, führt dazu, dass nginx 404 nicht gefunden wird. Diese Seiten funktionierten jedoch einwandfrei mit Apache. Hier ist die Server-Blockkonfiguration 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 funktionieren würde, führte dies jedoch dazu, dass eine Datei nicht gefunden wurde. Botschaft.

Das Hauptproblem besteht also darin, WordPress und Nginx dazu zu bringen, den Permalink mit der Erweiterung .php zu sehen, bevor versucht wird, eine .php-Datei auszuführen, bei der es sich nicht um eine echte Datei handelt.

Ist das möglich?

3
jpcadillac

Ich zog mich um

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.

1
jpcadillac

Das klingt nach einem Problem mit den Pfadangaben.

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;
    }

Ich hoffe, das bringt Sie in die richtige Richtung.

0
Dave Lozier