有没有办法在自定义清漆错误页面中显示中文字符,或在清漆中显示静态html文件

时间:2012-06-09 11:36:48

标签: varnish

我自定义清漆500错误页面,但我发现它无法显示中文字符,

我尝试从静态文件传递错误页面,但它无效 User-friendly error pages from Varnish

2 个答案:

答案 0 :(得分:0)

example you're pointing to使用sprintf和strcat操作文件内容,这可能在UTF-8上运行不正常(你的文件是UTF-8,如标题状态,对吧?)。您可以使用基于字节的C函数(如memcpy)测试运气,或使用utf-8校对字符串复制/格式化函数(从未在C中处理过这些内容)。

您能更详细地描述它无法正常工作吗?

答案 1 :(得分:0)

下面的

是varnish.vcf中的Related的完整部分

C{
  #include <stdio.h>
  #include <stddef.h>
  #include <stdlib.h>
}C
sub vcl_error {

set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.Retry-After = "5";
if ((obj.status == 500 || obj.status == 503)&&client.ip !~ flnet){
   C{
     FILE    *infile;
     char    *buffer;
     char fname [50];
     long    numbytes;

        sprintf(fname, "/var/www/html/%d.html", VRT_r_obj_status(sp));
     infile = fopen(fname, "r");
      if(infile == NULL)
         return 1;

       fseek(infile, 0L, SEEK_END);
       numbytes = ftell(infile);
       fseek(infile, 0L, SEEK_SET);
       buffer = (char*)calloc(numbytes, sizeof(char));
       fread(buffer, sizeof(char), numbytes, infile);
       fclose(infile);
       VRT_synth_page(sp, 0, buffer, "<!-- XID: ", VRT_r_req_xid(sp), " -->", vrt_magic_string_end);

       free(buffer);
     return 0;
    }C
  }