Nginx - Benutzerdefinierte 410-Seite mit Karte zurückgeben

973
martin s.

Zunächst verwende ich Nginx 1.12.1. Ich möchte folgendes erreichen:

  • Ich habe eine Liste von URLs, jede URL sollte 410 für SEO-Zwecke zurückgeben
  • Ich möchte diese Liste als Map in meine Nginx-Config aufnehmen (weil es eine wirklich lange Liste ist)
  • Die 410 sollte angepasst werden und wie die 404-Seite aussehen (für versehentlich gehende Menschen)

Relevantes Konfigurations-Snippet:

map $uri $gone { include gone.map; }  server { ... error_page 410 /410.html;  # works location ~^/gone-location-1 { return 410; }  # doesn't work if ($gone) { return 410; }  location / { root /app/public/; } } 

gegangen.map:

~^/gone-location-2 1; 

In beiden Fällen mache ich das return 410, aber das Ergebnis ist anders. Im Fall "funktioniert nicht" zeigt nginx nur die 410-Standardseite an, während im Fall "Works" 410.html zurückgegeben wird. In beiden Fällen gibt nginx den Statuscode 410 korrekt zurück.

Warum passiert das? Die Idee der Map-Datei gefällt mir wirklich sehr gut, und ich möchte nicht 250 Standorte erstellen, um diese Funktion zu nutzen. Irgendwelche Ideen, wie man das erreichen kann?

Edit: Ich habe noch eine Sache ausprobiert. Ich bekomme das gleiche Ergebnis mit 404 anstelle von 410.

2

1 Antwort auf die Frage

0
Peter van der Does

Späte Antwort, aber ich bin selbst auf dieses Problem gestoßen und habe eine Lösung gefunden.

server {  error_page 410 @gone;  if ($gone_var) { return 410; }  location @gone{ root /app/public/; rewrite ^(.*)$ /410.html break; }  location / { root /app/public/; } }