如何在 nginx 中将无效的 url 重定向到有效的 url?

How to redirect invalid url to a valid url in nginx?

我有一个 url 类型的有效 http://example.com/valid/. Using nginx how do i redirect a url of type http://example.com/valid/dsdhshd 到我的有效 url?

我试过了:

location /valid/ {
    resolver 8.8.8.8;
    proxy_pass http://example.com/valid/;
    proxy_redirect off;
}

但是它给出了 500 内部服务器错误。

我也尝试了位置 return 301 $scheme://example.com/valid/; 但这只会让我陷入无限的重定向循环。

如果要将重定向发送到客户端,请不要代理请求并直接发送。

server {
    # Your server configuration ...

    # Enclose regular expressions in default location.
    location / {

        location /valid {
            location ~ /valid/.+ {
                try_files $uri @invalid;
            }

            # Handle the request to the valid URL ...
        }

    }

    location @invalid {
        return 301 $scheme://$server_name/valid;
    }
}

这应该可以解决问题。你确实得到了一个重定向循环,因为你的位置块也匹配了 /valid/ URL 本身,一些你不想匹配的东西。您只想匹配 URLs 在该字符串之后有一些东西,例如/valid/foo。这正是上面位置块中的正则表达式所确保的。

这是我可以考虑的示例

server {
  location /valid {
    try_files $uri $uri/ @redirect_invalid;
  }
  location @redirect_invalid {
    return 301 $scheme://$server_name/valid;
  }
}

但这将是非常具体的,如果有很多文件夹,您需要分别添加每个文件夹,我想不出一种方法可以使所有文件夹都通用,也许其他人可以帮我解决这个问题。