Nginx - kembalikan halaman 410 kustom dengan peta

2

Pertama-tama, saya menggunakan Nginx 1.12.1. Saya ingin mencapai hal berikut:

  • Saya memiliki daftar url, setiap url harus mengembalikan 410 untuk keperluan SEO
  • Saya ingin memasukkan daftar ini sebagai peta dalam konfigurasi nginx saya (karena ini adalah daftar yang sangat panjang)
  • 410 harus disesuaikan dan terlihat seperti halaman 404 (untuk manusia yang tidak sengaja pergi ke sana)

Cuplikan konfigurasi yang relevan:

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

pergi.map:

~^/gone-location-2 1;

Dalam kedua kasus saya sedang melakukan return 410, tetapi hasilnya berbeda. Dalam kasus "tidak berfungsi", nginx hanya menampilkan halaman default 410, sedangkan dalam kasus "berfungsi", itu akan mengembalikan 410.html. Dalam kedua kasus, nginx mengembalikan kode status 410 dengan benar.

Mengapa ini terjadi? Saya sangat suka ide file peta, dan saya tidak ingin membuat 250 lokasi untuk membuat ini berfungsi. Ada ide tentang bagaimana mencapai ini?

Sunting: Saya baru saja mencoba satu hal lagi. Saya mendapatkan hasil yang sama persis dengan 404 bukannya 410.

martin s.
sumber

Jawaban:

0

Jawaban terlambat, tetapi saya mengalami masalah ini sendiri dan menemukan solusi.

server {

    error_page 410 @gone;

    if ($gone_var) {
        return 410;
    }

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

    location / {
        root /app/public/;
    }
}
Peter van der Does
sumber