Nginx + PHP(fastCGI上)は、私にとっては非常に便利です。 PHPファイルが存在しない場合、デフォルトの404エラーページ(無効な.htmlファイルの場合)を取得する代わりに)へのパスを入力すると、単に「入力なし」指定されたファイル。」。
この404エラーページをカスタマイズするにはどうすればよいですか?
Nginx config でerror_pageプロパティを使用します。
たとえば、404エラーページを/404.html
に設定する場合は、
error_page 404 /404.html;
500エラーページを/500.html
に設定するのは簡単です:
error_page 500 /500.html;
Nginx.confのすべてのロケーションブロックにカスタムエラーページを設定するか、サイト全体にグローバルエラーページを設定できます。
特定の場所の単純な404 not foundページにリダイレクトするには:
location /my_blog {
error_page 404 /blog_article_not_found.html;
}
サイト全体の404ページ:
server {
listen 80;
error_page 404 /website_page_not_found.html;
...
標準エラーコードを追加して、いくつかのタイプのエラーを1つのページにまとめることができます。
location /my_blog {
error_page 500 502 503 504 /server_error.html
}
Httpセクションでserver2という名前のアップストリームサーバーが定義されていると仮定して、まったく異なるサーバーにリダイレクトするには:
upstream server2 {
server 10.0.0.1:80;
}
server {
location /my_blog {
error_page 404 @try_server2;
}
location @try_server2 {
proxy_pass http://server2;
}
manual で詳細を確認できます。または、nginx.confおよびerror_pageという用語でgoogleを検索して、Web上の実際の例を確認できます。
構文に注意してください! Great Turtleはそれらを同じ意味で使用していましたが、
error_page 404 = /404.html;
ステータスコード200の404.htmlページを返します(=がこのページに中継しているため)
error_page 404 /404.html;
(元の)404エラーコードとともに404.htmlページを返します。
https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents
「error_page」パラメーターはリダイレクトを行い、リクエストメソッドを「GET」に変換します。これはカスタムレスポンスページではありません。
最も簡単な解決策は
server{
root /var/www/html;
location ~ \.php {
if (!-f $document_root/$fastcgi_script_name){
return 404;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params.default;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
ところで、NginxがPHPスクリプトによって返された404ステータスを処理するようにしたい場合は、追加する必要があります
[fastcgi_intercept_errors][1] on;
例えば。
location ~ \.php {
#...
error_page 404 404.html;
fastcgi_intercept_errors on;
}
このコンテキストでは、try_files
はif
よりも高速に動作するため、これらの回答は推奨されなくなりました。 try_files
をphpロケーションブロックに追加して、ファイルが存在するかどうかをテストします。そうでない場合は404を返します。
location ~ \.php {
try_files $uri =404;
...
}