#2518 closed defect (duplicate)
if in location with regex capture will reset numeric variable like $1 from captured group but not for named capture group
Reported by: | Owned by: | ||
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | nginx-core | Version: | 1.25.x |
Keywords: | Cc: | ||
uname -a: | Linux azure 5.15.0-67-generic #74-Ubuntu SMP Wed Feb 22 14:14:39 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux | ||
nginx -V: |
nginx version: nginx/1.25.1
built by gcc 11.2.0 (Ubuntu 11.2.0-19ubuntu1) built with OpenSSL 3.0.2 15 Mar 2022 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.25.1/debian/debuild-base/nginx-1.25.1=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' |
Description (last modified by )
This works:
location ~ /uploads/(?<filePath>.*)$ { if ($http_referer !~ "^https://example.com") { return 403; } more_set_headers 'X-Path: $1' 'X-Path2: $filePath' 'X-Referer: $http_referer'; try_files $uri altUploads/$filePath ../otherUploads/$filePath =404; }
and this won't:
location ~ /uploads/(.*)$ { if ($http_referer !~ "^https://example.com") { return 403; } more_set_headers 'X-Path: $1' 'X-Referer: $http_referer'; try_files $uri altUploads/$1 ../otherUploads/$1 =404; }
The X-Path
header doesn't exist in the response header when requesting the latter one.
If we remove the whole if block both variable and headers will be appeared in the response.
location ~ /uploads/(.*)$ { more_set_headers 'X-Path: $1' 'X-Referer: $http_referer'; try_files $uri altUploads/$1 ../otherUploads/$1 =404; }
Change History (2)
comment:1 by , 17 months ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
comment:2 by , 17 months ago
Description: | modified (diff) |
---|
Note:
See TracTickets
for help on using tickets.
Positional captures as available via the
$1..$9
variables are from the last executed regular expression, and the last regular expression is in theif
condition in the examples provided. That is, these variables are expected to be empty.In contrast, named captures are explicitly saved into the relevant variables when a regular expression matches, and remain available unless the same variable is explicitly overwritten.
Closing this as a duplicate of #1285, which is a ticket about improving documentation on captures.