我将一个 URL 用于不同的目的:
编辑:添加了基于 Tero 输入的解决方案
我在我的 nginx conf 文件中尝试过该规则:
location ~ / {
rewrite '^/path/items\?id=([0-9]*)$' /items/item?id=$1? break;
}
Run Code Online (Sandbox Code Playgroud)
当我访问页面 /path/items?id=XXX 时,我得到以下日志:
2016/08/25 14:08:53 [通知] 22903#0: 1 "^/path/items\?id=([0-9] )$" 与 "/path/items" 不匹配,客户端:XXX ,服务器:local.xxx.ins,请求:“GET /path/items?id=32442305 HTTP/1.1”,主机:“local.xxx.ins”
我从该日志中了解到 nginx 在进行匹配之前删除了 args。但我不知道如何获得包括 args 在内的匹配项。
我想出了一个非常接近 Tero 的解决方案。
location ~ /(path1|path2|path3) {
if ($arg_id) {
rewrite ^ $uri/item break;
}
proxy_pass http://local.xxx.ins:8080;
}
Run Code Online (Sandbox Code Playgroud)
您不能在rewrite指令中处理查询字符串。您只能在那里处理 URI。
你可以试试这个配置:
location /path/items {
if ($arg_item) {
rewrite ^ /items/item break;
}
try_files $uri $uri/ =404;
}
Run Code Online (Sandbox Code Playgroud)
该location /path/items只对拥有URL限制这种行为/path/items前缀。我们测试是否item在 HTTP 请求中定义了查询参数。如果是,我们重写 URI。否则,我们只是尝试客户端提供的 URI。
您可能需要try_files根据项目列表的制作方式修改指令。root如果未在server级别中定义,您可能还需要一个指令。
| 归档时间: |
|
| 查看次数: |
5501 次 |
| 最近记录: |