我有一个像这样的重定向规则设置
#redirect old phpbb links to xenforo links
if ( $arg_p ) {
rewrite ^\/forum\/viewtopic\.php /forum/posts/$arg_p/? permanent;
}
它将向任何与该正则表达式匹配的 URL 发送 301 到新格式。
不过我想知道是否有办法仅当目标 URL 有效时才执行此重定向(在这种情况下,有效意味着它不应返回 404 或 403)
答案1
你确实无法轻易做到这一点,而且你也不太可能真的想这么做。
如果你可以要做到这一点,它需要对每个传入请求都向你的 Web 应用程序进行查询,此外处理请求本身,从而使服务器负载增加一倍。这可能可以通过一些巧妙的嵌入式 Lua 代码来实现,但我认为您可能不想让服务器过载。
最好只是重定向所有内容,然后让目标(您的新论坛)在必要时提供 404。这实际上不会对 SEO 产生任何影响,因为原始链接已经是 404。但它提供了更好的用户体验,因为进入死链接的流量至少会看到新论坛,而不是纯白色的 nginx 404 页面。