Назад | Перейти на главную страницу

С nginx обслуживайте настраиваемую страницу 404 с заголовком 404 без изменения адреса просмотра.

Как заставить nginx обслуживать настраиваемую страницу 404, отвечая заголовком 404, без изменения адреса браузера, чтобы пользователь мог легко перепечатать его?

set $allowed 0; #(updated after comments)
error_page  404  /404page.html; #(updated after first answer, forgot to mention)

    location = /authreq.html {
    if ($allowed = 0){
#   return 307 $scheme://$host/404page.html ; #works but should be 404
#   return 404 "shows this message"; #does not redirect when inserting url instead of message
# rewrite ^ /404page.html break; #serves 404page.html and doesn't change browseraddress which is good, but sends a response header 200
# return 404 # invokes error_page directive with header 200 

    }
}

Вся конфигурация:

server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name www.fellowshipmedia.eu;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.php index.html index.htm;
    error_page   404  =  /404page.html;
    set $allowed 0;

    location = /authreq.html {
        if ($allowed = 0){
           # return 307 $scheme://$host/404page.html ; #works but should be 404
           # return 404 "shows this message"; #does not redirect when inserting url instead of message
           return 404; #
           # rewrite ^ /404page.html break; #serves 404page.html and doesn't change browseraddress which is good, but sends a response header 200
        }
    }



}

Простое выполнение следующих действий вернет не заголовок 404, а 200:

    server {
...   
  error_page  404  /404page.html;
...
  location = /authreq.html {
    if ($allowed = 0){
      return 404;
    }
  }
}

Чтобы вызвать заголовок 404 и обслуживать настраиваемую страницу 404 без изменения адреса адресной строки браузеров, вы должны добавить «404» в директиву error_page следующим образом:

    error_page   404  =404  /404page.html;

Разве директива error_page не сделает это за вас?

Например что-то вроде этого:

server {
...   
  error_page  404  /404page.html;
...
  location = /authreq.html {
    if ($allowed = 0){
      return 404;
    }
  }
}