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

ohtdti5x  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(101)

我想当一个请求被发送到服务器,有一个字符串值(电影|系列|视频|.),该字符串将被删除并定向到存储数据的路径。
这是我的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,这是不工作,请帮助

yqyhoc1h

yqyhoc1h1#

我可以看到一个小错误,在你的regex你用在你的重写规则。您需要使用$2。变量$1表示第一个捕获组,即电影、连续剧或视频部分,而$2表示第二个捕获组,即路径的其余部分。你可以阅读这篇文章,了解**capturing groups.**
它看起来像这样:

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;
}

相关问题