使用正则表达式检测 nginx 位置中的多个字符串并重写

问题描述 投票:0回答:1

我希望当请求发送到服务器并且开头有 (movie|series|video|...) 的字符串值之一时,该字符串将被删除并定向到存储数据的路径。

这是我的 nginx 位置配置

 location ~ ^/(movie|series|video|...)/.*\.ts {
        add_header Access-Control-Allow-Origin *;
        add_header X-App-Id media-service-nginx;
        rewrite ^/(movie|series|video|...)/(.*)$ /$1 break;
        root /storage/media;
    }

像这样的请求被发送到服务器

http://api.media.loc/movie/2023/02/21/video-1080-chunk_intro_300.ts
http://api.media.loc/series/2023/02/21/video-1080-chunk_intro_200.ts
http://api.media.loc/video/2023/02/21/video-1080-chunk_intro_100.ts

最后应该将请求重定向到该路径,例如

/storage/media/2023/02/21/video-1080-chunk_intro_300.ts

此配置为多字符串给出 404 错误

但是如果在配置中写入字符串,它就可以正常工作,

~ ^/movie/.*\.ts

我希望它支持多规则

~ ^/(movie|series|video|...)/.*\.ts
并重写
^/(movie|series|video|...)/(.*)$ /$1
,这是行不通的,请帮忙

regex nginx nginx-config nginx-location
1个回答
0
投票

我可以看到你的重写规则中有一个小错误。您需要使用

$2
。变量
$1
表示第一个捕获组,即电影、连续剧或视频部分,而
$2
表示第二个捕获组,即路径的其余部分。

它的外观如下:

location ~ ^/(movie|series|video)/.*\.ts {
    add_header Access-Control-Allow-Origin *;
    add_header X-App-Id media-service-nginx;
    rewrite ^/(movie|series|video)/(.*)$ /$2 break;
    root /storage/media;
}
© www.soinside.com 2019 - 2024. All rights reserved.