注: Lua noob
尝试强制使用小写URI,同时保持查询字符串参数不受修改和附加。
我能够使用lua string.lower(ngx.var.uri)
来处理URI,但它正在删除查询字符串。
我尝试过将$is_args$args
添加到我的try文件中,但相信在此之前它已经被删除了。
考虑到我必须用ngx.req.get_uri_args
在lua中创建一个表,并在将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;
}
这里的任何想法都很感激--谢谢你
发布于 2020-04-30 04:53:51
因此,这是可行的,但它进行了内部重写--它将url保留在浏览器大写中。
这重写了所有大写的URI,而不影响资产文件注意:在ubuntu上添加NGINX额外的NGINX opensource 1.14.0
我修改了我的区块如下,
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
发布于 2022-03-22 08:11:44
set_by_lua $uri_lowercase "return string.lower(ngx.var.uri)";
location ~[A-Z] {
return 301 $scheme://$http_host$uri_lowercase$is_args$args;
}
https://stackoverflow.com/questions/61523166
复制相似问题