我正在使用nginx web服务器提供.pdf
文件。 并根据title args
使用重写规则设置.pdf
文件的文件名。
我想要做的是,将我的域名example.com
添加到文件名中
1.如果title
var包含example.com
,则使用title
var数据作为文件名。
例如
URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=[example.com]ebook Filename : [example.com]ebook.pdf
2.如果title
var中没有包含example.com
,则将文件名作为[example.com]title var.pdf
例如
URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf?title=ebook Filename : [example.com]ebook.pdf
3.如果标题没有设置,则使用文件名作为[example.com]hash.pdf
文件名。
例如
URL : http://example.com/pdf/0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf Filename : [example.com]0D2E8C9DC2F732A6ACC6150811515F697E3C376C.pdf
我怎样才能达到这样的东西。 ?
我目前的configuration看起来像这样
#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; }
上面的代码工作正常,只有当标题var没有被设置,但如果我设置标题var作为[example.com]ebook.pdf
它再次添加域名和最终文件名变成
[example.com][example.com]ebook.pdf
据我所知,我们可以假设,如果在$arg_title
variables的开始处有一个[example.com]
子string,我们可以安全地将其切断。 所以这里是你需要的configuration:
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; }
在这里使用nginx 1.9.12:
标题= [example.com]试验
标题= just_test
标题未设置
与实际的文件在这里