首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Nginx服务器上执行不区分大小写的正则表达式?

如何在Nginx服务器上执行不区分大小写的正则表达式?
EN

Stack Overflow用户
提问于 2015-04-29 13:32:49
回答 1查看 1.4K关注 0票数 3

将服务器从Ubuntu迁移到Debian后发生了严重问题。Debian不允许两个文件,例如"a.html“和"A.html”位于同一个目录中。

我的服务器获得三种类型的请求,这是当前状态:

/archive/2014/www.Test.com这样的请求是随文件提供的:/archive/2014/blank.html

/archive/2015/Test.com/archive/2015/www.Test.com等请求与文件/archive/2015/T.html一起提供。

/archive/2015/test.com/archive/2015/www.test.com等请求与文件/archive/2015/t.html一起提供。

我希望最后两种类型的请求在这两种情况下(以不区分大小写的方式)提供文件/archive/2015/t.html

我怎样才能取得这个结果呢?

当前的服务器设置是:

代码语言:javascript
复制
server {
    listen   127.0.0.1:80;
    server_name 127.0.0.1;

    access_log /srv/siteone/logs/access.log;
    error_log /srv/siteone/logs/error.log error;

    location / {
        root   /srv/siteone/html;
        index  index.html index.htm;
        expires 1d;
    }

    rewrite ^/archive/2014/(.+)$ /archive/2014/blank.html last;
    rewrite ^/archive/2015/(www\.)*(.)(.+)$ /archive/2015/$2.html last; 

    error_page  403  /403.html;
    error_page  404  /404.html;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-02 21:59:57

有很多方法可以解决这个问题。

  1. 由于您只需要将一个特定的字母更改为小写,您可以在大小写不敏感的正则表达式中使用"map“: 映射$request $letter {“*^/存档/0-9{4}/(www.)?a(.*)?$ a;”*^/存档/0-9{4}/(www.)?b(.*)?$“b;*^/存档/0-9{4}/(www.)?C(.*)?$ c;"~*^/archive/0-9{4}/(www.)?d(.*)?$“d;*^/存档/0-9{4}/(www.)e(.*)?$”e“;”e“;*^/存档/0-9{4}/(www.)?f(.*)?$”f;“*^/存档/0-9{4}/(www.)?g(.*)?$ g;“~*^/archive/0-9{4}/(www.)?h(.*)?$ h;*^/archive/0-9{4}/(www.)?$”i(.*)?$“i”;**/archive/0-9{4}/(www.)?J(.*)?$“j;”*^/archive/0-9{4}/(www.)?K(.*)?$ k;“~*^/archive/0-9{4}/(www.)?l(.*)?$ l;*^/archive/0-9{4}/(www.)m(.*)?$”m;*^/archive/0-9{4}/(www.)n(.*)?$“n;”*^/archive/0-9{4}/(www.)?O(.*)?$ o;"~*^/archive/0-9{4}/(www.)?p(.*)?$“p;*^/archive/0-9{4}/(www.)?q(.*)?$ q;*^/archive/0-9{4}/(www.)?r(.*)?$”r;“*^/存档/0-9{4}/(www.)?s(.*)?$s”s;“~*^/archive/0-9{4}/(www.)?t(.*)?$ t;*^/archive/0-9{4}/(www.)?U(.*)?$ u;”u“;**/archive/0-9{4}/(www.)?v(www.)?v(.*)?$”v;“*^/存档/0-9{4}/(www.)?W(.*)?$ w;“~*^/存档/0-9{4}/(www.)?x(.*)?$ x;”*^/archive/0-9{4}/(www.)y(.*)?$“y;”*^/archive/0-9{4}/(www.)Z(.*)?$ z;}服务器{侦听127.0.0.1:80;server_name 127.0.0.1;access_log /srv/siteone/log/access_log.log;error_log /srv/siteone/logs/error.log错误;root /srv/siteone/html;location /{ index index.html index.htm;Extres1D;} rewrite ^/存档/2014/(.+)$/.+/blank.html;重写^/archive/2015/(www.)?(.)(.+)$ /存档/2015/$letter.html最后;error_page 403 /403.html;error_page 404 /404.html;}
  2. 如果您已经安装了嵌入式Perl模块(sudo apt-get install nginx-以外),则可以使用Perl将请求行设置为小写: perl_set $uri_lowercase 'sub { my $r = shift;返回lc($r->uri);};服务器{List127.0.0.1:80;server_name 127.0.0.1;access_log /srv/siteone/$r/access_log.$r;error_log /srv/siteone/log/error.log错误;root /srv/siteone/html;location /{ index index.html index.htm;Extern1D;}重写^/.+/(.+)$ /archive/2014/blank.html;重写^/archive/2015/(www.)?(.)(.+)$ $uri_lowercase;重写^/archive/2015/(www.)?(.+)$/$uri_lowercase/2015/$2.html;error_page 403 /403.html;error_page 404 /404.html}
  3. 如果您在Perl之前更喜欢Lua,您可以对Lua进行同样的操作(同样,您需要安装nginx-附加程序): 服务器{侦听127.0.0.1:80;server_name 127.0.0.1;access_log /srv/siteone/log.log;error_log /srv/siteone/log/error.log错误;root /srv/siteone/html;location /{ index index.html index.htm;Ext1D;}重写^/归档/2014/(.+)$/归档/2014/blank.html;rewrite_by_lua 'ngx.req.set_uri(string.lower(ngx.var.uri),false)';重写^/string.lower/2015/(www.)?(.+)$/.+/$2015/$2.html;error_page 403 /403.html;error_page 404 /404.html;}
  4. 如果您不喜欢以上的所有内容,那么总是会有一些黑暗的Nginx诡计可以帮助您(但我真的不推荐它): 服务器{侦听127.0.0.1:8484;access_log off;重写^.*$ /存档/2015/$host.html;根/srv/siteone/html;位置/{索引index.html index.htm;Exchange1D;}服务器{侦听127.0.0.1:80;server_name 127.0.0.1;access_log /srv/siteone/log/access.log.log;error_log /srv/siteone/log/error.log错误;root /srv/siteone/html;location /{ index index.html index.htm;Ex期1d;} location ~* ^/archive/2015/(?A).html${ proxy_set_header Host$letter;proxy_pass http://127.0.0.1:8484;}重写^/archive/2014/(.+)$ /档案/2014/blank.html;重写^/archive/2015/(www.)?(.)(.+)$ /存档/2015/$2.html最后;error_page 403 /403.html;error_page 404 /404.html;}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29945344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档