Como posso redirecionar solicitações para arquivos específicos para páginas hospedadas por outros servidores?

1

Ao solicitar um arquivo local, gostaria que um redirecionamento 301 levasse a uma página em um servidor diferente (um URL é fornecido). Isso geralmente pode ser feito usando uma simples diretiva Redirect , mas isso causaria alguns problemas de manutenção no meu caso: Ele não suporta redirecionamento de arquivos (dados seus nomes) sob diretórios específicos que podem ser alterados com frequência. Para mim, a melhor situação seria usar algo semelhante a links simbólicos com suporte adicional para "vincular" URLs fora do host. Além disso, com Options +Indexes , esse arquivo de "redirecionamento" também pode ser listado.

    
por xuhdev 26.11.2017 / 03:42

2 respostas

1

Isso pode funcionar: RedirectMatch 301 .*/<filename> <redirect target> .

O caractere curinga .* diz ao Apache para corresponder qualquer coisa ao nome real do arquivo, portanto, os diretórios que mudam com frequência não serão um problema.

Se você precisar corresponder nomes de diretórios específicos e tiver uma lista finita deles, poderá listar todos eles em uma única regra: RedirectMatch 301 .*/(dir1|dir2|dir3|...)/<filename <redirect target> .

    
por 26.11.2017 / 06:58
1

Adicione isso ao arquivo .htaccess :

RewriteEngine On

# Makes Apache redirect only if the target file doesn't exist on this server
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^assets/(.*)$ http://your-file-storage.com/$1 [R=301,L]

Essa configuração faz com que todas as solicitações para http://your-app.com/assets/* sejam redirecionadas para http://your-file-storage.com/* . Por exemplo, o URL http://your-app.com/assets/foo/bar.txt será redirecionado para http://your-file-storage.com/foo/bar.txt .

A string ^assets/(.*)$ é uma expressão regular que testa URLs. Se um URL se encaixa na expressão regular, ele é redirecionado.

A string http://your-file-storage.com/$1 é o destino de redirecionamento. O $1 é substituído pelo conteúdo dos parênteses da expressão regular.

Se você precisar de muitas regras de redirecionamento, adicione muitas diretivas RewriteRule ao arquivo .htaccess :

RewriteEngine On
RewriteRule ^assets1/(.*)$ http://your-file-storage1.com/$1 [R=301,L]
RewriteRule ^assets2/(.*)$ http://your-file-storage2.com/$1 [R=301,L]

Como alternativa, você pode adicionar uma diretiva RedirectMatch à configuração do host virtual no arquivo de configuração do Apache:

RedirectMatch permanent ^/assets/(.*)$ http://your-file-storage.com/$1

Funciona da mesma maneira.

    
por 26.11.2017 / 06:52