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