nginx - Nginx $is_args 和 $args 重写后清除
问题描述
我试图在访问日志中写入一些信息,这些信息取决于原始请求是否具有查询参数,为此我在 $http 块中使用 $is_args。
例如,如果收到的请求是http://www.website.com/something&a=1&b=2,访问日志行应该是
.... [GET params:true] ...
但是如果请求是http://www.website.com/something,那么访问日志行应该是
.... [GET params:false] ...
我也有location
一个重写的上下文:
if ( $redirect_to_somewhere = "true") {
return 302 $redirect_loc;
}
我的问题是执行重写后,$args
变量$is_args
变空并且什么都不返回。如果重写没有发生, $args 和 $is_args 具有来自原始请求的正确值。
尽管重写,我能做些什么来获得$is_args
原始请求的价值?我目前唯一可行的解决方案是在返回之前设置一个变量:
set $original_is_args $is_args;
然后在服务器范围之外使用它,但我看到警告不要使用在服务器{}之外以这种方式设置的变量。出于性能原因,我也不喜欢使用正则表达式匹配。
有没有可能的解决方案?
编辑:重定向后,导航到错误页面(在我的情况下这是正常的),因此原始请求中的 args 不被保留。这个问题仍然有效 - 如何在不必解析 $request_uri 的情况下仍然拥有原始 args(或 is_args)。
解决方案
推荐阅读
- javascript - 如何使用 sinon 模拟非类成员函数
- angular - Angular7 的 HTML 编辑器
- windows - 导入支持 GPU 的 TensorFlow 时,DLL 加载失败
- python - Pandas Date Groupby & Apply - 性能改进
- reactjs - React redux 更新 flatlist 项目,但将项目转换为数组
- php - PhpWord - TemplateProcessor:错误复制模板
- python-2.7 - 无法在所需位置显示面板
- docker - 使用 pycharm 运行时 Docker 冻结
- python - 有没有办法从一个大文本文件中获取一个 json 数据子集?
- python - 在 Tensorflow 中跨多级范围共享变量