`

nginx rewrite学习笔记

 
阅读更多

一、什么是Rewrite

 

 

  Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他

  URL的过程。URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页

  面方式的一种技术。比如http://www.123.com/news/index.asp?id=123 使用

  URLRewrite 转换后可以显示为 http://www.123.com/news/123.html

  对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。形如

  http://www.123.com/news/index.asp?id=123的网页地址,自然是毫无美感可言,而用

  UrlRewrite技术,你可以轻松把它显示为 http://www.123.com/news/123.html。

  理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于

  动态页面。所以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。

  从安全角度上讲,如果在url中暴露太多的参数,无疑会造成一定量的信息泄漏,可能

  会被一些黑客利用,对你的系统造成一定的破坏,所以静态化的url地址可以给我们带来更

  高的安全性。

二、Rewrite相关指令

 

  Nginx Rewrite相关指令有ifrewritesetreturn等。

  if 的语法 应用于 server和location环境内

  if (condition) { … }

  if可以支持如下条件判断匹配符号

  ~ 为区分大小写匹配

  ~* 为不区分大小写匹配

  !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

 

  -f 和!-f 用来判断是否存在文件

  -d 和!-d 用来判断是否存在目录

  -e 和!-e 用来判断是否存在文件或目录

  -x 和!-x 用来判断文件是否可执行

  在匹配过程中可以引用一些Nginx的全局变量,更多的变量请参考

  http://wiki.nginx.org/NginxHttpCoreModule 的 Variables 部分

  $args, 请求中的参数;

  $document_root, 针对当前请求的根路径设置值;

  $host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;

  $limit_rate, 对连接速率的限制;

  $request_method, 请求的方法,比如"GET"、"POST"等;

  $remote_addr, 客户端地址;

  $remote_port, 客户端端口号;

  $remote_user, 客户端用户名,认证用;

  $request_filename, 当前请求的文件路径名

  $query_string, 与$args相同;

  $scheme, 所用的协议,比如http或者是https

  $server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1";

  $server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用

  以取得地址(造成资源浪费);

  $server_name, 请求到达的服务器名;

  $document_uri 与$uri一样,URI地址;

  $server_port, 请求到达的服务器端口号;

  看了一大堆也许会有点晕,当然有时晕着晕着也就习惯了。不过我们还是先来看两个例

  子。这样更有助于理解。

  例 匹配访问的url地址是否是个目录

  if (-d $request_filename) {

  …;

  }

  例 匹配访问的地址是否以www开头

  if ($hosts ~* ^www) {

  …;

  }

  rewrite 指令根据表达式来重定向URI,或者修改字符串。可以应用于server,

  location, if环境下 每行rewrite指令最后应该根一个flag标记,支持的flag标记有

  last 相当于Apache里的[L]标记,表示完成rewrite

  break 本条规则匹配完成后,终止匹配,不再匹配后面的规则

  redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址

  permanent 返回301永久重定向,浏览器地址会显示跳转后URL地址

  last和break标记的区别在于,last标记在本条rewrite规则执行完后,会对其所在的

  server { … } 标签重新发起请求,而break标记则在本条规则匹配完成后,停止匹配,不

  再做后续的匹配。另有些时候必须使用last,比如在使用alias指令时,而使用proxy_pass

  指令时则必须使用break。

  例:以下这段rewrite会导致死循环

  location /abc/ {

  rewrite “^/abc/(.*)\.html$” /abc/index.html last;

  }

  我们应该将上面的last改成break以避免死循环。

  redirect和 permanent区别则是返回的不同方式的重定向,对于客户端来说一般状态

  下是没有区别的。而对于搜索引擎,相对来说301的重定向更加友好,如果我们把一个地址

  采用301跳转方式跳转的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎

  索引库中彻底废弃掉原先的老地址。

  使用302重定向时,搜索引擎(特别是google)有时会查看跳转前后哪个网址更直观,

  然后决定显示哪个,如果它觉的跳转前的URL更好的话,也许地址栏不会更改,那么很有

  可能出现URL劫持的现像。

  我们在做URI重写时,有时会发现URI中含有相关参数,如果需要将这些参数保存下

  来,并且在重写过程中重新引用,我们可以用到 () 和 $N 的方式来解决。

  例:匹配访问的url地址是否是个目录,如果是则自动加个 /

  if (-d $request_filename) {

  rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

  }

  例:用户访问的网址为www.test.com/abc.html 重写后真实地址是

  www.test.com/login.php?user=abc

  location ~* /php/.*\.html$ {

  rewrite /php/(.*)\.html /login.php?user=$1 last;

  }

  例:用户访问地址为/uplook/11-22-33.html重写后真实地址为

  /uplook/11/22/33.html

  location /uplook/ {

  rewrite /uplook/([0-9]+)-([0-9]+)-([0-9]+).html /uplook/$1/$2/$3.html last;

  }

  set 指令是用于定义一个变量,并且赋值。应用于server,location,if环境。

  语法格式为: set $变量名 变量值

  例:当访问任意目录下的whoami.html都重定向到 /who.html

  location ~* .*/whoami\.html$ {

  set $who 'who.html';

  rewrite .* /$who break;

  }

  return 指令用于返回状态码给客户端,应用于server,location,if环境。

  例:如果访问的 .sh 结尾的文件则返回403操作拒绝错误

  location ~* .*\.sh$ {

  return 403;

  }

 

 

 

分享到:
评论

相关推荐

    nginx学习笔记.zip

    **Nginx学习笔记概述** Nginx是一款高性能的HTTP和反向代理服务器,也是一款邮件代理服务器。它以其稳定性、高性能以及丰富的模块配置而受到广泛赞誉,常用于网站的负载均衡、静态文件处理和SSL加密等场景。本学习...

    nginx学习笔记及相关资料

    "nginx学习笔记及相关资料"这个压缩包中可能包含了关于Nginx的配置示例、教程文档、实战案例等,帮助学习者深入理解Nginx的工作原理,掌握配置和管理技巧,提升解决实际问题的能力。 总之,Nginx是一个强大且灵活的...

    Nginx笔记快速上手

    - Nginx支持URL重写,通过`rewrite`指令实现。这在实现SEO友好URL或者内部路径转换时非常有用。 - 使用`break`、`last`、`redirect`等标志控制重写规则的执行流程。 6. **访问控制** - 可以通过`allow`和`deny`...

    nginx进阶vip - 第二课笔记1

    总之,本篇笔记涵盖了Nginx进程管理、虚拟主机配置、URL路由和重写规则,以及基础的负载均衡设置,这些都是Nginx进阶学习中的关键知识点。掌握这些技能,能够帮助我们更好地管理和优化Nginx服务器,提升网站性能和...

    nginx教程.doc

    教程中还包含了学习笔记和参考资料,可以帮助读者更好地理解和应用所学知识。建议对Nginx感兴趣的运维和网管人员下载学习,提升自己的技能水平。获取教程,请访问:[http://pan.baidu.com/s/1miopi9y]...

    Nginx高性能Web服务器详解-123

    在"《Nginx高性能Web服务器详解-123》"这份文档中,我们可以期待深入学习Nginx的核心特性和实际应用场景。 1. **Nginx架构** Nginx采用事件驱动模型和异步非阻塞I/O,这使得它在处理大量并发请求时表现优异。它的...

    笔记资料.zip

    这份"笔记资料.zip"包含了作者在学习Java和Nginx过程中积累的知识点,旨在分享和帮助其他学习者。 首先,Java是一种面向对象的、跨平台的编程语言,它的广泛应用得益于其稳定性和强大的生态系统。Java的学习通常从...

    第三次课程笔记1

    【Nginx 知识点详解】 Nginx 是一款高性能的反向代理服务器,常用于网站的负载均衡和静态资源...通过上述内容的学习,我们可以掌握Nginx的基本操作和高级特性,将其应用于实际的项目中,提高服务器的性能和可靠性。

    CI框架学习笔记(一) - 环境安装、基本术语和框架流程

    以上就是CI框架学习笔记(一)中涉及的主要知识点,包括环境安装、基本术语以及框架流程。了解这些知识是学习CI框架,进行Web应用开发的基础。随着学习的深入,还有更多的高级特性和最佳实践需要掌握。

    老男孩 运维笔记.pdf下载 高清完整版

    页面重定向、rewrite规则配置以及安全设置是Apache配置中的高级话题。Web日志分析对于了解网站的访问量、用户行为等非常有用。 ### MySQL数据库 MySQL是一个流行的开源关系型数据库管理系统,广泛应用于网站和应用...

    马哥LAMP笔记

    **LAMP架构详解** ...在这个“马哥LAMP笔记”中..."马哥lamp视频笔记"可能包含了上述过程的详细步骤和注意事项,对于学习和实践LAMP环境搭建是非常有价值的资源。在实践中遇到问题时,查阅这些笔记可以帮助快速解决问题。

    老男孩linux运维课程笔记

    通过对上述知识点的学习,可以深入了解Linux运维中的各种优化技术和工具,掌握如何提高系统的安全性、稳定性和性能。同时,也能更好地理解和运用如rsync、Nginx、Apache和MySQL等关键组件和服务,为构建高效可靠的IT...

    【免费】ThinkPHP3.1.2经典笔记

    ### ThinkPHP3.1.2经典笔记知识点详解 #### 一、ThinkPHP 框架简介 ##### 1.1 ThinkPHP 概述 - **ThinkPHP** 是一个开源的 PHP 开发框架,旨在简化 Web 应用程序的开发过程。它采用 MVC (Model-View-Controller) ...

Global site tag (gtag.js) - Google Analytics