文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Nginx如何实现URL重写规则配置

2023-06-04 07:59

关注

这篇文章主要介绍了Nginx如何实现URL重写规则配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

rewrite模块介绍

nginx的重写模块是一个简单的正则表达式匹配与一个虚拟堆叠机结合。依赖于PCRE库,因此需要安装pcre。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。

rewrite模块指令

break

语法:break默认值:none使用字段:server, location, if

作用:完成当前设置的重写规则,停止执行其他的重写规则。

if

语法:if (condition) { … }默认值:none使用字段:server, location

注意:尽量考虑使用trp_files代替。

判断的条件可以有以下值:

一个变量的名称:空字符传”“或者一些“0”开始的字符串为false。字符串比较:使用=或!=运算符正则表达式匹配:使用~(区分大小写)和~(不区分大小写),取反运算!~ 和!~。文件是否存在:使用-f和!-f操作符目录是否存在:使用-d和!-d操作符文件、目录、符号链接是否存在:使用-e和!-e操作符文件是否可执行:使用-x和!-x操作符

return

语法:return code默认值:none使用字段:server, location, if

停止处理并为客户端返回状态码。非标准的444状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416与500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个URL,该URL将成为location头补值。没有状态码的URL将被视为一个302状态码。

rewrite

语法:rewrite regex replacement flag默认值:none使用字段:server, location, if

按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。

注意:如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。

尾部的标记(flag)可以是以下的值:

last – 停止处理重写模块指令,之后搜索location与更改后的URI匹配。break – 完成重写指令。redirect – 返回302临时重定向,如果替换字段用http://开头则被使用。permanent – 返回301永久重定向。

rewrite_log

语法:rewrite_log on | off默认值:rewrite_log off使用字段:server, location, if变量:无

启用时将在error log中记录notice级别的重写日志。

set

语法:set variable value默认值:none使用字段:server, location, if

为给定的变量设置一个特定值。

uninitialized_variable_warn

语法:uninitialized_variable_warn on|off默认值:uninitialized_variable_warn on使用字段:http, server, location, if

控制是否记录未初始化变量的警告信息。

重写规则组成部分

第一部分–正则表达式

可以使用括号来捕获,后续可以根据位置来将其引用,位置变量值取决于捕获正则表达式中的顺序,$1引用第一个括号中的值,$2引用第二个括号中的值,以此类推。如:

^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$# $1是两个小写字母组成的字符串# $2是由小写字母和0到9的数字组成的5个字符的字符串# $3将是个文件名# $4是png、jpg、gif中的其中一个。

第二部分–URI

请求被改写。该URI可能包含正则表达式中的捕获的位置参数或这个级别下的nginx任何配置变量。如:

/data?file=$3.$4

如果这个URI不匹配nginx配置的任何location,那么将给客户端返回301(永久重定向)或302(临时重定向)的状态码来表示重定向类型。该状态码可以通过第三个参数来明确指定。

第三部分–标记

第三部分也就是尾部的标记(flag)。 last标记将导致重写后的URI搜索匹配nginx的其他location,最多可循环10次。如:

rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 last;

break指令可以当做自身指令。如:

if ($bwhog) { limit_rate 300k; break;}

实例

http {    #定义image日志格式    log_format imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status;    # 开启重写日志    rewrite_log on;    server {        root /home/www;        location / {            # 重写规则信息            error_log logs/rewrite.log notice;              # 注意这里要用‘’单引号引起来,避免{}            rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;            # 注意不能在上面这条规则后面加上“last”参数,否则下面的set指令不会执行            set $image_file $3;            set $image_type $4;        }        location /data {            # 指定针对图片的日志格式,来分析图片类型和大小            access_log logs/images.log mian;            root /data/images;            # 应用前面定义的变量。判断首先文件在不在,不在再判断目录在不在,如果还不在就跳转到最后一个url里            try_files /$arg_file /image404.html;        }        location = /image404.html {            # 图片不存在返回特定的信息            return 404 "image not found\n";        }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Nginx如何实现URL重写规则配置”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯