Como redirecionar se um usuário tentar acessar diretamente os arquivos de imagem apenas no navegador? Quero manter a capacidade de incorporar imagens com <img src="...">
. Como redirecionar de
https://img.example.com/c/600x1200_90_webp/img-master/img/2022/01/03/08/04/54/95259215_p0_master1200.jpg
para
https://example.com/detail?id=95259215
Este é o meu nginx conf
location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<filename>.+\.(jpg|png|webp))$" {
return 301 https://example.com/detail?id=$filename;
}
O código não está funcionando porque vai funcionar, https://example.com/detail?id=95259215_p0_master1200.jpg
mas preciso cortar a string após o último dígito do nome do arquivo, portanto, neste caso, corte o _p0_master1200.jpg
. Também não sei como fazer isso se o usuário estiver acessando pelo navegador.
Sua expressão regular
(?<filename>.+\.(jpg|png|webp))$
captura todo o nome do arquivo para a variável filename. Para extrair apenas parte antes_
da variável, use o seguinte:Este corresponde apenas a números para a
filename
variável (eu chamariaimage_id
para ser mais descritivo). https://regexr.com é uma boa ferramenta para trabalhar com expressões regulares.Para limitar a exibição apenas a navegadores, você precisa usar o módulo de referência http nginx .
Esses dois combinados, a configuração ficaria assim:
O nginx verificará o valor do HTTP Referer. Se contiver o nome especificado no
server_name
campo, enviará o redirecionamento. O campo de referência é definido pelo navegador quando carrega recursos para uma página da web.