Назад | Перейти на главную страницу

Перезапись Apache для извлечения нескольких фрагментов данных из исходного URL-адреса запроса

Попытка создать перезапись Apache, которая применяется только к видеофайлам, на выделенный веб-сервер, обслуживающий видео.

Для этого требуется логика перезаписи, которая извлекает несколько фрагментов информации из исходного запроса, включая HTTP_HOST имя домена, request_uri и тип целевого файла. Я много искал помощи и предложений, прошел через огромное количество проб и ошибок ... и только приблизился, и, кажется, не могу понять это на 100% правильно. Вот чего я пытаюсь достичь:

Пример входящего URL:

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

Предполагаемый целевой URL:

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

Таким образом, перенаправление, которое применяется ТОЛЬКО к запросам, которые заканчиваются типами расширений видеофайлов (например, .mp4), который извлекает только входящее доменное имя (не ведущее www, или конечный .com из исходного HTTP_HOST), и извлекает оставшийся URI .... и перенаправляет его на новый веб-сервер в папку с видео, названную по имени исходного домена хоста (например, 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? Обратите внимание, что будут поступать входящие запросы для нескольких разных доменов (вот почему имя домена нужно извлечь для нового пути к папке!), Которые все будут перенаправлены на одну и ту же цель apache, обслуживающую веб-сайт.

Вы очень близки к тому, что вам нравится, вам только не хватает ( & )

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 если у вас есть полное доменное имя, например 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]