Попытка создать перезапись 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]