Как заставить 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;
}
}
}