Nginx/Tengine实现网址大小写转换

    最近有一项目需要移植到Linux下,功能简单来讲就是FTP上传+HTTP下载。

    由于Windows操作系统中,文件名是不区分大小写的,而Linux系统是大小写敏感,导致对应开发人员及程序都感冒了!

  解决分3步:

    首先,使用FTP上传时,需要统一大小写。文件名和路径要统一使用大写或小写,推荐用小写。一般主流的FTP工具都支持此类转换:

    FTP客户端,传输选项

    然后,需要将已上传的目录和文件做一次转换。下例为递归将目录和文件改为小写:

#!/bin/bash
find -exec sh -c 'rm -f "$0" `echo "$0" | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1' {} \;

    最后,在HTTP前端做统一处理,将下载地址进行统一转换。

  转换方法有3种:

    1、使用perl模块(不推荐!Nginx官网已申明perl模块存在内存漏洞的可能,笔者在生产环境中有遇到,推测是在reload时发生的)

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

perl_set $url '
    sub {
            my $r = shift;
            my $re = lc($r->uri);
            return $re;
        }
    ';


server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

         location / {
                 if ($uri ~ [A-Z]){ rewrite ^(.*)$ $url last; }
                 root /usr/share/tengine/html;
                 index  index.html;
         }

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}

    2、使用lua模块(推荐!),示例如下:

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

dso { # DSO module for Tengine
     load ngx_http_lua_module.so;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

         location / {
                 if ($uri ~ [A-Z]){
                    rewrite_by_lua 'return ngx.redirect(string.lower(ngx.var.uri),ngx.HTTP_MOVED_PERMANENTLY)';
                }
                 root /usr/share/tengine/html;
                 index  index.html;
         }

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}

    3、使用第3方模块(ngx_http_lower_upper_case),示例如下:

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

         location / {
                 if ($uri ~ [A-Z]){
                    lower $url "$uri";
                    rewrite ^(.*)$ $url redirect;
                 }
                 root /usr/share/tengine/html;
                 index  index.html;
         }

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}

转载于:https://www.cnblogs.com/higkoo/articles/nginx_lower_case_url.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值