为参数提供文件夹
Serve a folder for a parameter
我对 root 后的参数有疑问 url:
URL is : https://test/?version=12.1.0
我要的是version=numner.number.number开头的参数
在根目录“v12.1.0”
下提供一个文件夹
location ~ ^\?version=v(\d+\.\d+\.\d+) {
root /var/www/test/htdocs/v;
}
这可能吗?我一直在尝试尝试文件和 root,但我无法让它工作。在这种情况下我应该使用地图吗?
Nginx 在处理之前规范化 URI。 ?
之前的 URI 部分可用作 $uri
变量,?
之后的 URI 部分可用作 $args
变量。
location
和 rewrite
指令对 $uri
变量的值进行操作,因此您目前的方法将不起作用,因为查询字符串已被删除。
$args
变量进一步拆分为其他单独的变量,因此 version=
参数的值可用作 $arg_version
.
一种解决方案是使用 map
块来解码 $arg_version
并根据需要在 try_files
语句中使用映射变量。
例如:
map $arg_version $mypath {
~*^(v\d+\.\d+\.\d+)$ /;
default "";
}
server {
...
root /var/www/test/htdocs;
location ... {
try_files $mypath$uri =404;
}
}
我们可以按原样使用 $arg_version
,但是 map
确保路径前缀经过清理并包含必要的 /
分隔符。
请注意 map
块位于 server
块之外。有关详细信息,请参阅 this document。
根据您的具体要求,您也可以直接使用映射变量 root
。例如:
root /var/www/test/htdocs/$mypath;
我对 root 后的参数有疑问 url:
URL is : https://test/?version=12.1.0
我要的是version=numner.number.number开头的参数 在根目录“v12.1.0”
下提供一个文件夹location ~ ^\?version=v(\d+\.\d+\.\d+) {
root /var/www/test/htdocs/v;
}
这可能吗?我一直在尝试尝试文件和 root,但我无法让它工作。在这种情况下我应该使用地图吗?
Nginx 在处理之前规范化 URI。 ?
之前的 URI 部分可用作 $uri
变量,?
之后的 URI 部分可用作 $args
变量。
location
和 rewrite
指令对 $uri
变量的值进行操作,因此您目前的方法将不起作用,因为查询字符串已被删除。
$args
变量进一步拆分为其他单独的变量,因此 version=
参数的值可用作 $arg_version
.
一种解决方案是使用 map
块来解码 $arg_version
并根据需要在 try_files
语句中使用映射变量。
例如:
map $arg_version $mypath {
~*^(v\d+\.\d+\.\d+)$ /;
default "";
}
server {
...
root /var/www/test/htdocs;
location ... {
try_files $mypath$uri =404;
}
}
我们可以按原样使用 $arg_version
,但是 map
确保路径前缀经过清理并包含必要的 /
分隔符。
请注意 map
块位于 server
块之外。有关详细信息,请参阅 this document。
根据您的具体要求,您也可以直接使用映射变量 root
。例如:
root /var/www/test/htdocs/$mypath;