2015-05-04 12 views
16

Utilizzando .htaccess e ErrorDocument 404 /error.php, se l'accesso di un esempio valido URL .: http://example/css/invalid-file.css:Recuperare REDIRECT_STATUS con error_page

<?php 
echo 'REDIRECT_STATUS: ', $_SERVER['REDIRECT_STATUS'], PHP_EOL, 
    'REDIRECT_URL: ', $_SERVER['REDIRECT_URL'], PHP_EOL, 
    'REDIRECT_REQUEST_METHOD: ', $_SERVER['REDIRECT_REQUEST_METHOD']; 

uscita:

Ma in Nginx utilizzando error_page 404 /error.php; questo non sta funzionando, il risultato in Nginx è:

REDIRECT_STATUS: 200 
REDIRECT_URL: 
REDIRECT_REQUEST_METHOD: 

Nota: REDIRECT_URL e REDIRECT_REQUEST_METHOD sono undefineds

Come impostare le variabili $_SERVER[REDIRECT_STATUS], $_SERVER[REDIRECT_REQUEST_METHOD] e $_SERVER[REDIRECT_URL] utilizzando Ngnix? il file

fastcgi_params:

fastcgi_param QUERY_STRING   $query_string; 
fastcgi_param REQUEST_METHOD   $request_method; 
fastcgi_param CONTENT_TYPE   $content_type; 
fastcgi_param CONTENT_LENGTH   $content_length; 

fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name; 
fastcgi_param SCRIPT_NAME    $fastcgi_script_name; 
fastcgi_param PATH_INFO    $fastcgi_path_info; 
fastcgi_param PATH_TRANSLATED   $document_root$fastcgi_path_info; 
fastcgi_param REQUEST_URI    $request_uri; 
fastcgi_param DOCUMENT_URI   $document_uri; 
fastcgi_param DOCUMENT_ROOT   $document_root; 
fastcgi_param SERVER_PROTOCOL   $server_protocol; 

fastcgi_param GATEWAY_INTERFACE  CGI/1.1; 
fastcgi_param SERVER_SOFTWARE   nginx/$nginx_version; 

fastcgi_param REMOTE_ADDR    $remote_addr; 
fastcgi_param REMOTE_PORT    $remote_port; 
fastcgi_param SERVER_ADDR    $server_addr; 
fastcgi_param SERVER_PORT    $server_port; 
fastcgi_param SERVER_NAME    $server_name; 

fastcgi_param HTTPS     $https; 

# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param REDIRECT_STATUS   200; 
+0

Cosa significa [http_response_code()] (https://php.net/manual/en/function.http-response-code.php) tornare? – nasonfish

+0

Che cosa dice la tua configurazione di FastCGI per 'REDIRECT_STATUS'? Scommetto che è hard coded a '200'. – Brad

risposta

14

Per risolvere il problema in Nginx, è necessario creare un falso location.

Esempio:

# Set fake location for 404 
error_page 404 @fakeroute404; 

# Access fake location 
location @fakeroute404 { 
    ...# Others needed settings 

    include /etc/nginx/fastcgi_params; # Include fastcgi params 

    fastcgi_param REDIRECT_REQUEST_METHOD "GET"; # Set HTTP method 
    fastcgi_param REDIRECT_STATUS 404; # Set HTTP status 
    fastcgi_param REDIRECT_URL $uri; # Set REDIRECT_URL 
}