Opened 17 months ago

Last modified 17 months ago

#2518 closed defect

if in location with regex capture will reset numeric variable like $1 from captured group but not for named capture group — at Initial Version

Reported by: n0099@… 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

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 (0)

Note: See TracTickets for help on using tickets.