Apache 重写以从原始请求 URL 中提取多条数据

Apache 重写以从原始请求 URL 中提取多条数据

尝试创建仅适用于视频文件的 Apache 重写,转移到专用的视频服务网络服务器。

它需要重写逻辑,从原始请求中提取多条信息,包括HTTP_HOST域名、request_uri 和目标文件类型。我花了很多时间寻找帮助和建议,并经历了大量的反复试验......但只接近成功,似乎无法 100% 正确。以下是我想要实现的目标:

传入 URL 示例:

https://www.example1.com/images/source/vidtest.mp4

预期登陆网址:

https://www.webvideo.com/example1_video/images/source/vidtest.mp4

因此,重定向仅适用于以视频文件扩展名类型(如.mp4)结尾的请求,它仅提取传入的域名(而不是原始 HTTP_HOST 的前导www或尾随.com),并提取剩余的 URI....并将其重定向到新的 Web 服务器,进入以原始主机域名(例如example1)命名的视频文件夹,后跟_video,然后附加整个原始 URI 的其余部分。

这是我当前的重定向逻辑:

RewriteCond %{HTTP_HOST} ^www\.[^.]+\.com$
RewriteCond %{REQUEST_URI} \.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)$ [NC]
RewriteRule ^/(.*)$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

它似乎可以正常工作,只接收针对这些视频文件扩展名类型之一的传入请求,并正确地重定向到预期的目标www.webvideo.com域,并且还正确地附加了尾随的 URI(变量$1)。但不幸的是,它将传入的文件类型(例如mp4)放在 之前的 %1 变量位置中_video,而不是原始域名。因此,该示例传入请求导致重定向到此:

https://www.webvideo.com/mp4_video/images/source/vidtest.mp4

有人可以建议更正吗?我必须做什么才能将原始域名作为变量取出并放入新文件夹路径,并使重定向仅适用于视频文件类型,并且还延续其余的尾随 URI?请注意,将会有多个不同域的传入请求(这就是为什么需要为新文件夹路径提取域名的原因!),这些请求都将重定向到同一个单一的 Web 服务 apache 目标。

答案1

你离你想要的东西已经很近了,你只缺少(&)

RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.com$
RewriteCond %{REQUEST_URI} \.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)$ [NC]
RewriteRule ^/(.*)$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

重点是%1指重写条件中的第一个捕获组。捕获组位于 (&之间),在您的情况下,这是 URI 扩展(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)。在主机条件中添加新的捕获组会为您提供两个捕获组,但对于重写规则,您只需要第一个。

补充说明:这只适用于主域,没有其他子域,除非www您拥有类似的 FQDN,否则www.video.example.com它将不起作用。

编辑:

第一个代码示例基本上只关注主要问题,但正如命令中所提到的,整个重写规则可以进行优化。

RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.com$ [NC]
RewriteRule ^/?(.*\.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg))$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

相关内容