我希望当请求发送到服务器并且开头有 (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
,这是行不通的,请帮忙
我可以看到你的重写规则中有一个小错误。您需要使用
$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;
}