NGINX - 处理 ID 或用户名

NGINX - Handle both ID or Username

我有 2 个这样的网址:

1 - 示例。com/user/JohnFifty/

2 - 示例。com/user/45771/

两者都有效,但只能选其一。我想允许两者,这在 PHP 代码中启用。

我试过了

if ($arg_id ~ ([\d]+)[^\d]) {
   rewrite ^/user/([^/]*)/$ /user.php?id= last;
}
rewrite ^/user/([^/]*)/$ /user.php?username= last;

为了检测这种情况,如何让 NGINX 检测 GET 请求是 ID 还是字符串(用户名)?

谢谢

这正是 map block can be very helpful, being used among with the named capture groups:

的情况
map $id $id_type {
    ~^\d+$   id;
    default  username;
}

server {
    ...
    rewrite ^/user/(?<id>[^/]+)/$ /user.php?$id_type=$id;
    ...
}