Nginx - Customizing 404 page

后端 未结 5 2220
无人共我
无人共我 2020-12-07 10:29

Nginx+PHP (on fastCGI) works great for me. When I enter a path to a PHP file which doesn\'t exist, instead of getting the default 404 error page (which comes for any invalid

相关标签:
5条回答
  • 2020-12-07 10:52

    These answers are no longer recommended since try_files works faster than if in this context. Simply add try_files in your php location block to test if the file exists, otherwise return a 404.

    location ~ \.php {
        try_files $uri =404;
        ...
    }
    
    0 讨论(0)
  • 2020-12-07 10:55

    The "error_page" parameter makes a redirect, converting the request method to "GET", it is not a custom response page.

    The easiest solution is

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

    By the way, if you want Nginx to process 404 status returned by PHP scripts, you need to add

    [fastcgi_intercept_errors][1] on;

    E.g.

         location ~ \.php {
                #...
                error_page  404   404.html;
                fastcgi_intercept_errors on;
             }
    
    0 讨论(0)
  • 2020-12-07 10:57

    You use the error_page property in the nginx config.

    For example, if you intend to set the 404 error page to /404.html, use

    error_page 404 /404.html;
    

    Setting the 500 error page to /500.html is just as easy as:

    error_page 500 /500.html;
    
    0 讨论(0)
  • 2020-12-07 11:00

    You can setup a custom error page for every location block in your nginx.conf, or a global error page for the site as a whole.

    To redirect to a simple 404 not found page for a specific location:

    location /my_blog {
        error_page    404 /blog_article_not_found.html;
    }
    

    A site wide 404 page:

    server {
        listen 80;
        error_page  404  /website_page_not_found.html;
        ...
    

    You can append standard error codes together to have a single page for several types of errors:

    location /my_blog {
        error_page 500 502 503 504 /server_error.html
    }
    

    To redirect to a totally different server, assuming you had an upstream server named server2 defined in your http section:

    upstream server2 {
        server 10.0.0.1:80;
    }
    server {
        location /my_blog {
            error_page    404 @try_server2;
        }
        location @try_server2 {
            proxy_pass http://server2;
        }
    

    The manual can give you more details, or you can search google for the terms nginx.conf and error_page for real life examples on the web.

    0 讨论(0)
  • 2020-12-07 11:16

    Be careful with the syntax! Great Turtle used them interchangeably, but:

    error_page 404 = /404.html;

    Will return the 404.html page with a status code of 200 (because = has relayed that to this page)

    error_page 404 /404.html;

    Will return the 404.html page with a (the original) 404 error code.

    https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

    0 讨论(0)
提交回复
热议问题