Nginx reescreve URLs, mas não arquivos estáticos

1

Eu preciso reescrever URLs como

http://www.domain.com/blog/wp-content/uploads/this-is-a-static-file.jpg

para

http://www.domain.com/wp-content/uploads/this-is-a-static-file.jpg

Estou usando esta regra:

location /blog/wp-content$ {
        rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last;
}

O mais estranho é que apenas as URLs diretamente atrás do conteúdo do wp e sem arquivos estáticos são reescritas corretamente:

http://www.domain.com/blog/wp-content/uploads/ => http://www.migayopruebas.com/wp-content/uploads/

No entanto, há mais de um subnível OU um arquivo estático está envolvido, não funciona:

http://www.domain.com/blog/wp-content/uploads/migayo-trangulacion-laton.jpg => doesn't change

link = > não muda

Alguém poderia me indicar o caminho certo para fazer isso? Eu tenho lido o Nginx doc e vários exemplos e ainda não consigo fazer funcionar.

Muito obrigado, cumprimentos.

    
por alvaroreig 22.06.2014 / 12:47

2 respostas

1

Sua solução não funciona, porque você não tem um regex location (o caractere ~ está ausente) e você finaliza o local com o $ , que é um caractere regex.

Você pode fazer isso de maneira um pouco mais simples:

location ~ /blog/wp-content/(?<filename>.+)$ {
    rewrite ^ /wp-content/$filename last;
}

Então, aqui você faz a captura de regex na diretiva location e usa a parte capturada do caminho com o destino rewrite .

Se você deseja fazer um redirecionamento do lado do cliente 301, use o seguinte:

location ~ /blog/wp-content/(?<filename>.+)$ {
    rewrite ^ http://www.domain.com/wp-content/$filename permanent;
}
    
por 22.06.2014 / 22:58
1

(Eu postei uma resposta porque > 50 reputação é necessária para comentar)

Por que o "$"?

Você provavelmente quer isso:

location /blog/wp-content/ {
        rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last;
}
    
por 22.06.2014 / 21:50