Como alterar o nome do arquivo dinamicamente dependendo do título args - nginx reescreva

4

Estou exibindo .pdf arquivos usando o servidor da web nginx. e definindo o nome do arquivo .pdf usando regra de reescrita, dependendo do title args .

o que estou tentando fazer é adicionar meu nome de domínio example.com no nome do arquivo

1. se title var contiver example.com , use title var dados para nome do arquivo.

por exemplo.

URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=[example.com]ebook
Filename : [example.com]ebook.pdf

2. Se title var não contiver example.com , em seguida, faça o nome do arquivo como [example.com]title var.pdf

por exemplo,

URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=ebook
Filename : [example.com]ebook.pdf

3. Se o título não estiver definido, use o nome do arquivo como [example.com]hash.pdf filename.

por exemplo,

URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf
Filename : [example.com]0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf

Como posso conseguir algo assim? ?

minha configuração atual é semelhante a esta

#pdf download block
location ~* /pdf/([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]+)\.pdf$ {

#if title is not set then use hash.pdf as filename
if ( $arg_title  = '' ) {
    add_header Content-Disposition 'attachment; filename="[example.com]$1$2$3$4$5$6.pdf"';
}

add_header Content-Disposition 'attachment; filename="[example.com]$arg_title.pdf"';
alias   /var/www/example.com/pdf/$1/$2/$3/$4/$5/$1$2$3$4$5$6.pdf;
expires 1y;
}

acima, o código funciona bem apenas se o título var não estiver definido, mas se eu definir o título var como [example.com]ebook.pdf , ele adicionará o nome do domínio mais uma vez e o nome do arquivo final se tornará

[example.com][example.com]ebook.pdf 
    
por AMB 20.03.2016 / 13:25

1 resposta

5

Até onde eu entendi, podemos supor que, se houver uma [example.com] de substring no início da variável $arg_title , podemos recortá-la com segurança. Então aqui está a configuração que você precisa:

location ~* /pdf/([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F]+)\.pdf$ {

 #First of all we should put pdf path from the request into a variable,
 #since $1,$2,$n would contain other data later:
set $hashpath $1/$2/$3/$4/$5/$1$2$3$4$5$6;

 #Same applies to hash title:
set $hashtitle $1$2$3$4$5$6;

 #Now we try to get the title argument without getting [example.com] in the beginning:
if ( $arg_title ~ "^(\[example\.com\])?(.*)$")
{
   #This way if title contained [example.com], it would go to $1 variable, while $2 has our new cleaned title:
  set $pdftitle $2;
}

 #now we check if title was empty:
if ( $arg_title  = '' ) {
 #and assign our title that $hashtitle variable we got from the request earlier:
    set $pdftitle $hashtitle;
}

 #also we check if title has only [example.com] without anything else:
if ( $arg_title  = '[example.com]' ) {
    set $pdftitle $hashtitle;
}

 #After that we can safely put [example.com] in front of our filename, without worrying that there would be a double:
add_header Content-Disposition 'attachment; filename="[example.com]$pdftitle.pdf"';

alias /var/www/example.com/pdf/$hashpath.pdf;
expires 1y;
}

Funciona bem com o nginx 1.9.12 aqui:

title = [exemplo.com] teste

title = just_test

título não definido

com o arquivo atual localizado aqui

    
por 25.03.2016 / 05:29

Tags