美文网首页基础服务
nginx rewrite遇到的简单问题

nginx rewrite遇到的简单问题

作者: zhou | 来源:发表于2016-11-23 17:24 被阅读204次

引子:

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? ;

相关文章

网友评论

    本文标题:nginx rewrite遇到的简单问题

    本文链接:https://www.haomeiwen.com/subject/zbsvpttx.html