web-dev-qa-db-ja.com

nginx - URLの.phpとのパーマリンクが機能しない

サイトをApacheサーバーからnginxサーバーに移行しています。多くのページでは、パーマリンクの最後に.php拡張子が付いています。これらのページを表示しようとすると、nginx 404が見つかりません。しかし、これらのページはApache上ではうまく機能しました。これがサイトのサーバーブロック設定です。

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

}

"#try_files $ uri = 404;"とコメントしました。それでもうまくいくかどうかを確認するには、「ファイルが見つかりません」という結果になります。メッセージ。

そのため、主な問題は、WordPressとnginxが、.phpファイルを実行しようとする前に、その拡張子が.phpのパーマリンクを確認することです。これは実際のファイルではありません。

これは可能ですか?

3
jpcadillac

私は変わることになった

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

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

現在は機能していますが、現在セキュリティ上の問題であると感じています。

1
jpcadillac

これはパス情報の問題のように聞こえます。

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

これで正しい方向に進むことができるでしょう、私は願っています。

0
Dave Lozier