Nginx-返回带有地图的自定义 410 页面

Nginx-返回带有地图的自定义 410 页面

首先,我使用的是Nginx 1.12.1。我想完成以下事情:

  • 我有一个 URL 列表,出于 SEO 目的,每个 URL 都应返回 410
  • 我想将此列表作为地图包含在我的 nginx 配置中(因为它是一个非常长的列表)
  • 410 应该定制,看起来像 404 页面(以防人们不小心进入那里)

相关配置片段:

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

消失.地图:

~^/gone-location-2 1;

在这两种情况下,我都执行了return 410,但结果不同。在“不起作用”的情况下,nginx 仅显示 410 默认页面,而在“起作用”的情况下,它将返回 410.html。在这两种情况下,nginx 都正确返回了状态代码 410。

为什么会发生这种情况?我真的很喜欢地图文件的想法,我不想创建 250 个位置来实现这一点。有什么想法可以实现这一点吗?

编辑:我刚刚又尝试了一件事。我用 404 而不是 410 得到了完全相同的结果。

答案1

回答晚了,但我自己遇到了这个问题并找到了解决方案。

server {

    error_page 410 @gone;

    if ($gone_var) {
        return 410;
    }

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

    location / {
        root /app/public/;
    }
}

相关内容