代码之家  ›  专栏  ›  技术社区  ›  Reza

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

  •  0
  • Reza  · 技术社区  · 2 年前

    我希望当一个请求被发送到服务器,并且开头有一个字符串值(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 ,这不工作,请帮忙

    1 回复  |  直到 2 年前
        1
  •  0
  •   mandy8055    2 年前

    我可以在重写规则中使用的正则表达式中看到一个小错误。你需要使用 $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;
    }