我的 NGINX 配置中的映射似乎存在问题。
第一个映射处理用户 ID 或用户名。
第二个映射覆盖第一个映射,并强制使用 token 代替 id 或 username。第二个映射应该仅有的处理我们用于身份验证的两种类型的字符串哈希。
Both mappings allow 2 types of parameters each.
预计首次测绘
example.com/user/1/ *OR* example.com/user/Jonny/
实际结果(ID 和用户名)
/user/token/ => $_GET['token'] should not be here (its NULL)
预计进行第二次映射
example.com/access/SHA1-HASH/ *OR* example.com/access/OTHER-ENC/
实际结果(两个请求)
Requests for /access/* work perfectly fine.
我们的 NGINX 配置(相关内容)
map $id $user {
~^\d+$ id;
default username;
}
map $password $auth {
~^\d+$ password;
default token;
}
server {
rewrite ^/access/([^/]*)/(?<password>[^/]+)/$ /download.php?$auth&$auth=$password;
rewrite ^/user/(?<id>[^/]+)/$ /user.php?$user&$user=$username
}
我想支持这两种映射。
任何帮助都将不胜感激!
答案1
$username
变量这里没有定义,这至少是一个问题。
否则我不明白为什么这种配置会产生您所描述的效果。
根据上述规则GET /user/1234/
重写为/user.php?id&id=$username
。