Перезапись 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, обслуживающую веб-сайт.

3
задан 6 October 2017 в 16:28
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 если у вас есть полное доменное имя вроде 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]
3
ответ дан 3 December 2019 в 06:27

Теги

Похожие вопросы