1.11Nginx Rewrite规则详解

前言

Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正 则表达式是基于 Perl 语言。通常而言,几乎所有的 WEB 服务器均可以支持 URL 重写。 Rewrite URL 规则重写的用途:
❑ 对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;

❑ 隐藏网站 URL 真实地址,浏览器显示更加美观;

❑ 网站变更升级,可以基于 Rewrite 临时重定向到其他页面。

Nginx Rewrite 规则使用中有三个概念需要理解,分别是:Rewrite 结尾标识符、Rewrite 规则常用表达式、Nginx Rewrite 变量,如下为三个概念的详解:

(1) Nginx Rewrite 结尾标识符,用于 Rewrite 规则末尾,表示规则的执行属性。

last  :相当于 Apache 里的(L)标记,表示完成 rewrite 匹配; break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。
redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址。

permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址。 其中 last 和 break 用来实现 URL 重写时,浏览器地址栏 URL 地址不变。

(2) Nginx Rewrite 规则常用表达式,主要用于匹配参数、字符串及过滤设置。

.	匹配任何单字符;

[word]	匹配字符串:word;

[^word]	不匹配字符串:word;

jfedu|jfteach	可选择的字符串:jfedu|jfteach;

?	匹配 0 到 1 个字符;

*	匹配 0 到多个字符;

+	匹配 1 到多个字符;

^	字符串开始标志;

$	字符串结束标志;

\n	转义符标志。

(3) Nginx Rewrite 变量,常用于匹配 HTTP 请求头信息、浏览器主机名、URL 等。

HTTP	headers:HTTP_USER_AGENT,	HTTP_REFERER,	HTTP_COOKIE,	HTTP_HOST,
HTTP_ACCEPT;

connection  &  request:  REMOTE_ADDR,  QUERY_STRING;

server  internals:  DOCUMENT_ROOT,  SERVER_PORT,  SERVER_PROTOCOL;

system  stuff:  TIME_YEAR,  TIME_MON,  TIME_DAY。 详解如下:
HTTP_USER_AGENT	用户使用的代理,例如浏览器;

HTTP_REFERER		告知服务器,从哪个页面来访问的; HTTP_COOKIE	客户端缓存,主要用于存储用户名和密码等信息; HTTP_HOST		匹配服务器 ServerName 域名;
HTTP_ACCEPT	客户端的浏览器支持的 MIME 类型;

REMOTE_ADDR	客户端的 IP 地址 QUERY_STRING		URL 中访问的字符串; DOCUMENT_ROOT	服务器发布目录; SERVER_PORT	服务器端口; SERVER_PROTOCOL	服务器端协议;
TIME_YEAR	年;

TIME_MON	月;

TIME_DAY	日;

(4) Nginx Rewrite 以下配置均配置在 nginx.conf 或者 vhosts.conf 中,企业中常用的 Nginx Rewrite 案例如下:

1. 将 jfedu.net 跳转至 www.jfedu.net。

if  ($host  =  'jfedu.net'  )  {
rewrite  ^/(.*)$  http://www.jfedu.net/$1	permanent;
}

2.访问 www.jfedu.net 跳转 www.test.com/new.index.html。

rewrite	^/$	http://www.test.com/index01.html	permanent;

3.访问/jfedu/test01/跳转至/newindex.html,浏览器地址不变。

rewrite	^/jfedu/test01/$	/newindex.html	last;

4.多域名跳转到 www.jfedu.net。

if  ($host  !=  ‘www.jfedu.net’  )  {
rewrite  ^/(.*)$	http://www.jfedu.net/$1	permanent;
}

5. 访问文件和目录不存在跳转至 index.php。

if  (  !-e  $request_filename  )
{
rewrite	^/(.*)$	/index.php	last;
}

6. 目录对换 /xxxx/123456 ====> /xxxx?id=123456。

rewrite	^/(.+)/(\d+)	/$1?id=$2	last;

7. 判断浏览器 User Agent 跳转。

if(  $http_user_agent	~  MSIE)
{
rewrite  ^(.*)$  /ie/$1  break;
}

8. 禁止访问以.sh,.flv,.mp3 为文件后缀名的文件。

location  ~  .*\.(sh|flv|mp3)$
{
return  403;
}

9. 将移动用户访问跳转至移动端。

if  (  $http_user_agent  ~*  "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)"  )
{
rewrite  ^/$	http://m.jfedu.net/	permanent;
}

10. 匹配 URL 访问字符串跳转。

if  ($args  ~*  tid=13){
return  404;
}

11. 访问/10690/jfedu/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任何多个字符。

rewrite	^/([0-9]+)/jfedu/(.+)$	/index.php?tid/$1/items=$2	last;
### 如何使用 Keil5 烧录 Hex 文件 对于仅拥有已编译好的 hex 文件而无源文件的情况,在 Keil V5 平台上直接烧录 hex 文件至单片机(如华大单片机)需采取特定的方法,因为直接调用该平台进行此类操作不可行[^1]。 #### 设置 Output 路径 进入 Keil 的 output 设置界面,指定要烧录的 hex 文件的具体位置。确保在路径输入框中填写完整的 hex 文件名称并附带 `.hex` 扩展名;缺少此扩展名可能导致系统继续尝试烧录先前编译的结果而非所选的 hex 文件[^3]。 #### 配置 Flash 工具选项 针对不同类型的微控制器(MCU),可能还需调整 flash 下载工具的相关配置参数以匹配目标设备的要求。这一步骤通常涉及选择合适的编程算法以及设定通信接口等细节[^2]。 #### 启动下载过程 完成上述准备工作之后,可以通过点击调试窗口内的 “Download” 或者快捷菜单里的相应命令来启动实际的程序写入流程。如果一切顺利的话,软件会自动连接硬件并将选定的 hex 数据传输到 MCU 中存储起来[^4]。 ```python # Python 示例代码用于说明自动化脚本概念 (并非真实实现) def download_hex_to_mcu(hex_file_path, mcu_type): """ 自定义函数模拟将 HEX 文件下载到指定型号的 MCU 上 参数: hex_file_path -- 完整路径字符串指向待上传的 .hex 文件 mcu_type -- 字符串表示的目标单片机类型标识符 返回值: 成功则返回 True ,失败抛出异常信息 """ try: configure_output_settings(hex_file_path) # 设定输出设置 select_flash_tool(mcu_type) # 挑选适合的闪存工具 execute_download_command() # 发送下载指令 return True # 表明成功结束 except Exception as e: raise RuntimeError(f"Failed to upload {hex_file_path}: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值