Opened 8 years ago
Closed 8 years ago
#1271 closed defect (wontfix)
$arg_s:event:id does not work
| Reported by: | Owned by: | ||
|---|---|---|---|
| Priority: | blocker | Milestone: | |
| Component: | nginx-core | Version: | 1.10.x |
| Keywords: | Cc: | ||
| uname -a: | nginx version: nginx/1.10.3 | ||
| nginx -V: |
Linux 327acafc16fa 4.9.13-moby #1 SMP Sat Mar 25 02:48:44 UTC 2017 x86_64 Linux
It is alpine linux in docker but the same behaviour can be easily reproduced in ubuntu / macos or centos. |
||
Description
I try to set a variable in nginx configuration which holds the value of the query parameter: s:event:id. Unfortunately, it does not work. Below you can find a sample location from my configuration file:
location /test-error {
set $sid $arg_s:event:sid;
return 200 $sid;
}
sid variable holds :event:sid instead of the query parameter value. Below you can find a curl statement for testing this:
curl -v http://127.0.0.1:8080/test-error?s:event:sid=123x46xx
Change History (4)
comment:1 by , 8 years ago
comment:2 by , 8 years ago
I know colon (:) is a reserved character but I think there are many cases where people are using it in the query parameter name (even though they shouldn't).
comment:3 by , 8 years ago
Here is a possible workaround for the problem:
location /test-error {
set $sid "";
if ($args ~* "s:event:sid=(.*)[&]?") {
set $sid $1;
}
return 200 $sid;
}
comment:4 by , 8 years ago
| Resolution: | → wontfix |
|---|---|
| Status: | new → closed |
Variable names in nginx can only include alphabetical characters, numbers, and "_" ([a-zA-Z0-9_]), so nginx sees $arg_s:event:sid in your example as the $arg_s variable and the :event:sid string. There are no plans to changes this. Using the $args variable if you want to access arguments with non-trivial names is a way to go.

I've just reproduced the bug in the latest nginx relase: 1.13.0. The commit number I've used for building the nginx from is 0cb7be3c715fd6b85227610c654c9b8f6f7ae666.