• nginx解析带中文的url重定向之后404问题


    首先,有这样一个需求:一个系统的图片存储是放在upyun上的,现在有个客户需要本地化部署,所以需要将图片进行本地存储。为了兼容,图片存储的路径格式保持和在upyun上的存储路径一致。在upyun上的存储路径是这样的(客户id/日期/longtime_图片名)

    http://up.***.com/accountid/20160505/1462419931818_qq.png

    图片上传到本地D盘响应的文件夹下,用nginx做代理,可以访问图片地址。配置下nginx

    location /img { 
      alias D:/;
    }
    

    可以通过127.0.0.1/img/accountid/1462419931818_qq.png访问图片。

    然后,upyun提供了一项缩略图的功能,就是在图片url地址后面加"!w50h50"(50px,height:50px)。这是再通过127.0.0.1/img/accountid/1462419931818_qq.png!w50h50就访问不了了。所以,为了使以前带缩略图表示的url地址也能访问,需要对"!"后面的地址进行过滤。在nginx中进行这样的配置

    if ($request_uri  ~* "^(.*)!(.*)$") {
        rewrite ^(.*) $1 last;
      #last会重新请求server }

    这样配置之后,127.0.0.1/img/accountid/1462419931818_qq.png!w50h50就可以访问了。但是如果图片地址中含有中文,比如127.0.0.1/img/accountid/1462419931818_中文.png!w50h50还是会404.查看error.log,发现nginx对url地址进行了两次编码,即第一次访问时地址是127.0.0.1/img/accountid/1462419931818_%e4%b8%ad%e6%96%87.png!w50h50,过滤之后重新访问server,nginx又对url进行了encode,地址变为127.0.0.1/img/accountid/1462419931818_%25e4%25b8%25ad%25e6%2596%2587.png。

    此时,应该使用代理设置,代理不会对url进行encode,配置如下

        location /img { 
                if ($request_uri  ~* "^(.*)!(.*)$") {
                     proxy_pass  http://127.0.0.1/$1;
                }
                alias D:/;
            }

      

      

  • 相关阅读:
    LNMP 部署
    zabbix3.2安装graphtree3.0.4
    升级java8---from centos
    mysql5.6-5.7性能调优
    samba server install
    centos7 zabbix3 install done
    实验四总结
    第五周学习小结
    个人的一些html、css笔记
    为什么wait,notify,notifyAll定义在Object中?
  • 原文地址:https://www.cnblogs.com/blog-cq/p/nginx-urlencode.html
Copyright © 2020-2023  润新知