nginx location 与 $request_uri 的匹配区别

举例  http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

我现在有这样一个需求

把http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

在nginx中重写成

http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152

代码   错误示范

 location ~* /Handler/FileHandler\.ashx?([^_]+)(_[0-9]+)$ {
		set $m1 $1;
		rewrite  ^/(.*)$  /\1?$m1;
	}

这个为什么是错误的呢?

因为location只能匹配uri  不能匹配参数

大概意思     uri

www.jastme.org/Handler/FileHandler.ashx?

参数

fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

就是这样  后面的这段在location中是不能匹配的,所以不管怎么写 都不会成功的,因为location的规则就不会生效

正确代码

        location ~*/Handler/FileHandler\.ashx?
        {
                if ($request_uri ~* ^/Handler/FileHandler.ashx\?([^_]+)(_[0-9]+)$) {
                set $m1 $1;
                rewrite ^/Handler/FileHandler.ashx /Handler/FileHandler.ashx?$m1? permanent;}

只有使用$request_uri 才能获取完整的链接

时间: 2024-08-29 10:23:03

nginx location 与 $request_uri 的匹配区别的相关文章

Nginx location段root和alias区别

首先root块: nginx的配置文件如下: [[email protected] www]# cat /etc/nginx/conf.d/admin.conf  server {     listen 80;     server_name _;     index  index.html index.php;     location /admin/ {         root /data/www/;         auth_basic "admin com";        

【转】nginx location匹配规则

转载请保留:http://www.nginx.cn/115.html location匹配命令 ~      #波浪线表示执行一个正则匹配,区分大小写~*    #表示执行一个正则匹配,不区分大小写^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录=      #进行普通字符精确匹配@     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location 匹配的优先级(与

nginx location 匹配规则

location匹配规则 ~             #波浪线表示执行一个正则匹配,区分大小写 ~*           #表示执行一个正则匹配,不区分大小写 !~和!~*    #分别为区分大小写不匹配及不区分大小写不匹配 ^~           #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =             #进行普通字符精确匹配 @            #"@" 定义一个命名的 location,使用在内部定向时,例如 er

Nginx location指令匹配顺序规则

location匹配命令 1. "= ",字面精确匹配, 如果匹配,则跳出匹配过程.(不再进行正则匹配) 2. "^~ ",最大前缀匹配,如果匹配,则跳出匹配过程.(不再进行正则匹配) 3. 不带任何前缀:最大前缀匹配,举例如下: location /  代表以"/"开头的搜索匹配, 再没有正则表达式匹配的情况下才进行这个匹配(优先级最低) 4. "~ ",大小写相关的正则匹配 5. "~* " , 大小写

Nginx Location匹配顺序

理论部分 文字释义匹配规则如下: 略述: 1.nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配.如果有多个标准uri可以匹配,就匹配其中匹配度最高的一个location. 2.然后,nginx在使用location块中,正则uri和请求字符串,进行匹配.如果正则匹配成功,则结束匹配,并使用这个location处理请求:如果正则匹配失败,则使用标准uri中,匹配度最高的location. 详细: 1.如果有精确匹配,会先进行精确匹配,匹配成功,立

nginx location匹配规则

location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写 ~* #表示执行一个正则匹配,不区分大小写 ^~ #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 = #进行普通字符精确匹配 @ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location = / { # 只匹配"/". [ configuration A ] } location /

Nginx Location指令配置及常用全局变量

在实践安装nginx的时候,不知道./configure是什么意思,这里特地记录一下. 在linux中./代表当前目录,属于相对路径../代表上一级目录,属于相对路径/代表根目录,/开头的文件都是绝对路径./configure的意思是执行当前目录下面的configure文件configure一般都有可执行的权限,如果没有的话,用./configure是不能执行的,但是可以这样执行:sh ./configure 使用--prefix参数指定nginx安装的目录 不指定prefix,则可执行文件默认

nginx location配置

nginx location配置 location在nginx中起着重要作用,对nginx接收到的请求字符串进行处理,如地址定向.数据缓存.应答控制.代理转发等 location语法 location [=|~|~*|^~] uri {...} []部分是匹配类型,可以没有,其中各项含义: (1)= 精准匹配,请求字符串必须和uri完全相同时匹配成功 (2)~ 区分大小写的正则匹配 (3)~* 不区分大小写的正则匹配 (4)^~ 注意这个不是正则匹配,表示uri以普通字符串开头, (5)空 表示

nginx location配置(URL)

语法规则: location [=|~|~*|^~] /uri/ { … }= 表示精确匹配,这个优先级也是最高的^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格).~  表示区分大小写的正则匹配~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则/ 通用匹配,任何请求都会匹配到,默认