rewrite可以写在server段、location段和if段。语法:

rewrite regexp replacement [flag]

flag是标记。有4种标记,它们的作用如下表。

flag 说明
last 停止处理当前上下文中的其他重写模块指令,并为重写后的uri再次进行上下文的匹配
break 和break指令一样,都是停止处理当前上下文中的其他重写模块指令
redirect 返回临时重定向状态码302。当replacement部分不是以"http://"或者"https://"或者"$schema"开头的时候使用,"$schema"变量表示使用的是什么协议
permanent 返回永久重定向状态码301

注意:

last和break用来实现URL改写,此时浏览器中的地址不会改变,但实际上在服务器上访问的资源和路径已经改变了。

redirect和permanent用来实现URL跳转,浏览器中的地址会改变为跳转后的地址

在使用proxy_pass指令时要使用break标记。last标记在本条rewrite规则执行完后,继续在当前上下文对重写后的地址发起匹配请求,而break则在本次匹配完成后停止再次匹配。

例如下面的两条重写规则。

rewrite "^/bbs/(.*)/images/(.*)\.jpg$" www.linuxidc.com/bbs/$2/images/$1.jpg last;
rewrite "^/bbs/(.*)/images/(.*)\.jpg$" www.linuxidc.com/bbs/$2/images/$1.jpg break;

如果访问的是www.linuxidc.com/bbs/a/images/b.jpg则重写后为www.linuxidc.com/bbs/b/images/a.jpg,

但是重写后的地址仍然可以匹配到规则^/bbs/(.*)/images/(.*)\.jpg$,此时如果使用last标记,则会再次进行重写,最终导致URL重写循环,nginx默认支持10次循环,然后返回500状态码。

而如果使用break标记,则在重写完成后不会再次匹配重写。

例子1. 在server字段中写rewrite,使得任意以linuxidc.com结尾的访问重定向到www.linuxidc.com。

server_name  www.linuxidc.com;
rewrite (.*).linuxidc.com www.linuxidc.com permanent;

例子2. 在location字段中rewrite,使得localhost/bbs/*的访问都重定向到localhost/forum/*。

server {
listen 80;
server_name localhost;
location /bbs {
root html/;
index index.html;
rewrite "/bbs/(.*)" "/forum/$1" last;
}
}

可以测试一下,比如nginx安装目录为:/usr/local/nginx,那么在/usr/local/nginx/html中新建2个文件夹,bbs和forum,并且分别在这两个文件夹中都建立文件1.txt,分别写入

hello, bbs

hello, forum

然后访问http://localhost/bbs/1.txt, 可以看到返回hello, forum。 表示重写成功

附加一个基于openrestry的https方案    https://www.cnblogs.com/shihuc/p/7150900.html



最新文章

  1. AjaxControlToolkit MaskedEdit Unspecified error 未指定错误
  2. [学习笔记] 七步从AngularJS菜鸟到专家(4和5):指令和表达式 [转]
  3. C++ code Summary --- 2015.11.8
  4. ubuntu eclipse下配置C++ 环境
  5. paip.提升用户体验----gcc c++ JIT-debugging 技术
  6. 删除Windows 文本右键选项
  7. C/C++中的隐式类型转换
  8. 京东UED招聘web前端开发工程师(中/高级)
  9. MS SQL Server递归查询
  10. netty开发教程(一)
  11. Python进阶之模块
  12. NLP 第7章 文本向量化
  13. hdu-6035 Colorful Tree
  14. linux程序的常用保护机制
  15. Rsync 软件的工作方式
  16. 查看MySQL日志数据binlog文件
  17. hdu 1316(大整数)
  18. 2-4 zookeeper配置文件介绍,运行zk
  19. 使用metasploit进行栈溢出攻击-1
  20. code review的意义

热门文章

  1. bootstraptable为行中的按钮添加事件
  2. Spring IoC入门
  3. des,原理待续
  4. Linux下patch的制作和应用
  5. mybatis开发Dao的Mapper动态代理方式
  6. 在JS中使用全局变量
  7. 布局xml文件不能预览
  8. iOS's GCD Note
  9. Electron 安装与使用
  10. SpringMVC源码解析- HandlerAdapter初始化