サイトを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のパーマリンクを確認することです。これは実際のファイルではありません。
これは可能ですか?
私は変わることになった
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;
}
現在は機能していますが、現在セキュリティ上の問題であると感じています。
これはパス情報の問題のように聞こえます。
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;
}
これで正しい方向に進むことができるでしょう、私は願っています。