首先,我使用的是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/;
}
}