nginx rewrite遇到的简单问题

引子:

http://www.test.com/?top 重定向到 http://www.testtop.com/

遇到的问题:

立即想到的解决办法就是nginx配置文件中增加下面的配置:

rewrite  ^/\?top$  http://www.testtop.com/  redirect; 

但重启nginx后,访问http://www.test.com/?top没有重定向到新页面。
那么nginx配置肯定出问题了,google后得到下面几个知识点。

知识点

rewrite的语法先列下:
rewrite regex replacement [flag]

  • 1.rewrite的正则是不匹配query string的,即rewrite只针对请求url中问号(?)之前的部分进行重写。
    问号之后的是请求参数,在nginx用全局变量$query_string表示。

  • 2.nginx会默认在重定向地址后面加上query_string,如果不想加上query_string,可以在rewrite地址的末尾添加一个问号(?)

解决方法

在nginx配置文件中添加下面的配置:

if ( $request_uri  ~  "/\?top$" ) {
      rewrite ^(.*)$  http://www.testtop.com/? redirect;
}

rewrite的flag参数

  • last 表示完成rewrite,终止执行后面的rewrite指令,并且重写后的url会重新从server走一遍
  • break 终止执行后面的rewrite指令
  • redirect 返回302临时重定向,浏览器地址栏会显示跳转后的地址
  • permanent 返回301永久重定向,浏览器地址栏会显示跳转后的地址

全局参数

  • $request_uri 包含请求参数的原始uri
  • $args 保存了query_string的值,同$query_string
  • $arg_PARARAMTER 保存了query_string具体参数的值,比如?name=zhou,$arg_name变量的值就是'zhou'

另一个重定向

http://www.test.com/article?tid=12345重定向到http://www.test.com/article/123456
可以使用如下配置:

rewrite  ^/article$  /article/$arg_tid? ;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,037评论 0 9
  • Nginx rewrite基本语法 Nginx的rewrite语法其实很简单.用到的指令无非是这几个: set i...
    Zhaifg阅读 14,549评论 2 21
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的东阅读 5,842评论 0 5
  • 一一一資洲八景之一。图为張大千先生所繪 雲蒸霞蔚化晴岚, 缥缥渺渺绕龙山。 最是雨停登高处, 万方景色碧如天。
    黄泥村人阅读 659评论 18 16