注意: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;
}