Reescreva o Apache para extrair vários dados do URL de solicitação original

3

Tentando criar uma reconfiguração do Apache que se aplique somente a arquivos de vídeo, em um servidor da web de veiculação de vídeos dedicado.

É necessária uma lógica de reescrita que extraia várias informações da solicitação original, incluindo HTTP_HOST nome do domínio, request_uri e tipo de arquivo de destino. Fiz uma grande busca por ajuda e sugestões, e passei por uma tremenda quantidade de testes e erros. E só cheguei perto, e não consigo entender 100% correto. . Veja o que estou tentando realizar:

Exemplo de URL de entrada:

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

URL de destino pretendido:

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

Portanto, um redirecionamento que se aplica APENAS a solicitações que terminam em tipos de extensão de arquivo de vídeo (como .mp4 ), que extrai apenas o nome de domínio de entrada (não o líder www ou o .com final do HTTP_HOST original), e extrai o URI restante .... e o redireciona para um novo servidor da web, em uma pasta de vídeo nomeada com o nome de domínio do host original (por exemplo, example1 ) seguido por _video e o restante de todo o URI original anexado.

Aqui está a lógica de redirecionamento que tenho atualmente:

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]

Parece estar funcionando corretamente para atender somente as solicitações recebidas de um desses tipos de extensão de arquivo de vídeo, e está redirecionando corretamente para o destino desejado www.webvideo.com domain e também está anexando adequadamente o URI à direita. $1 variable). Mas, infelizmente, ele está colocando o tipo de arquivo de entrada (como mp4 ) no local da variável% 1 antes de _video e não o nome de domínio original. Então, esse exemplo de solicitação de entrada resulta em ser redirecionado para isso:

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

Alguém pode sugerir uma correção? O que devo fazer para obter o nome do domínio original como uma variável e para o novo caminho da pasta E o redirecionamento só se aplica aos tipos de arquivo de vídeo E também transitaria o resto do URI à direita? Observe que haverá solicitações de entrada para vários domínios diferentes (é por isso que o nome do domínio precisa ser extraído para o novo caminho da pasta!) Que serão todos redirecionados para o mesmo destino do apache da veiculação da Web.

    
por K.McCallum 06.10.2017 / 04:18

1 resposta

3

Você está muito próximo do que gosta de ter, só está perdendo ( & )

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]

O ponto é %1 refere-se ao primeiro grupo de captura em suas condições de reescrita. O grupo de captura está entre ( & ) e, no seu caso, essa foi a extensão URI (mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg) . Adicionar o novo grupo de captura na sua condição de host dá a você dois grupos de captura, mas para a sua regra de reconfiguração você só precisa do primeiro.

Uma observação adicional: Isso só funciona para o domínio principal sem outro subdomínio que www , se você tiver um FQDN como www.video.example.com , ele não funcionará.

EDITAR:

O primeiro exemplo de código é basicamente focado apenas no problema principal, mas, como mencionado nos comandos, a regra de reescrever o furo pode ser otimizada.

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]
    
por 06.10.2017 / 04:53