NGINX和LUA在保留查询字符串的同时强制使用小写URI



注意:Lua-noob

试图强制使用小写URI,同时保持查询字符串参数未修改和附加。

我可以使用luastring.lower(ngx.var.uri)来处理URI,但它会删除查询字符串。

我已经尝试将$is_args$args添加到我的尝试文件中,但相信它在此之前就被删除了。

我想我必须在lua中用ngx.req.get_uri_args创建一个表,并在将URI转换为小写后创建另一个块将其追加回来。。只是不确定这是否是正确的方法

我还没有看到关于如何使用ngx.req.set_uri_args在set_by_lua_block结果上设置args的文档,而只是最初的请求。。

这是我尝试过的两个代码块。

#works for just URI, but drops query string parameters 
set_by_lua_block $uri_lowercase { return string.lower(ngx.var.uri) }
location ~ [A-Z] {
try_files $uri $uri/ $uri_lowercase $uri_lowercase/ =404;
}

也尝试过这个,但不起作用:(

location ~ [A-Z] {
try_files $uri $uri/ $uri_lowercase$is_args$args $uri_lowercase/$is_args$args  =404;
}

这里有任何想法都很感激——谢谢

所以这是有效的,但它进行了内部重写——将浏览器中的url保留为大写。

这将重写所有具有大写字母的URI,而不会影响资产文件注意:在ubuntu 上向nginx开源1.14.0添加了nginx附加功能

我修改了我的区块如下,

set_by_lua $uri_lowercase "return string.lower(ngx.var.uri)";
location ~ (([A-Za-z])w+(?!(ttf|woff2|otf|eot|svg|png|jpg|jpeg|css|js)$)([^.]+$)) {
rewrite ^(.*)$ $scheme://$host$uri_lowercase;
}

Regex解释

([A-Z])w+=包含大写字母的任何单词

(?!(ttf|woff2|otf|eot|svg|png|jpg|jpeg|css|js)$)=负向前看,指定在主表达式之后不能匹配的组(如果匹配,则丢弃结果(。

([^.]+$)=否定集,不捕获以句点结尾的字符串,例如style.css

set_by_lua $uri_lowercase "return string.lower(ngx.var.uri)";
location ~[A-Z] {
return 301 $scheme://$http_host$uri_lowercase$is_args$args;
}

最新更新