nginx的rewrite

来源:互联网 发布:dnf斗兽场印章淘宝 编辑:程序博客网 时间:2024/06/04 23:32
  • rewrite结尾标识符

1)last :就相当于Apache里的(L)标记,表示完成rewrite匹配
2)break:完成本条规则匹配后,终止匹配,不会再匹配后面的规则
3)redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
其中last和break用来实现URL重写时,浏览器地址栏URL地址不变

  • rewrite常用表达式
.                               匹配任何单字符?                               匹配01个字符*                               匹配0到多个字符+                               匹配1到多个字符^                               字符串开始标志$                              字符串结束标志\n                              转义符标志[string]                            匹配字符串:string[^string]                           不匹配字符串:stringhello|world                         可选择的字符串:hello|world
  • rewrite常用变量
REMOTE_ADDR             客户端的IP地址HTTP_USER_AGENT             用户使用的代理,例如浏览器REQUEST_FILENAME            访问的文件和目录HTTP_REFERER                告知服务器,从哪个页面来访问的HTTP_COOKIE                 客户端缓存,主要用于存储用户名和密码等信息HTTP_HOST                   服务器域名HTTP_ACCEPT                 客户端的浏览器支持的MIME类型DOCUMENT_ROOT               服务器发布目录SERVER_PORT                 服务器端口SERVER_PROTOCOL             服务器端协议QUERY_STRING                URL中访问的字符串TIME_YEAR                   年TIME_MON                    月TIME_DAY                    日
  • rewrite常用案例

1)去掉域名后面的forum.php

rewrite  /forum.php http://www.lee1.com/ permanent;rewrite  ^/$   /forum.php last;

这里写图片描述

这里写图片描述

2)判断是否IE浏览器,是的话重写到百度页面,ZF有时候用这个来判断,如果不用ie就直接返回个错误页面并提示要用ie

if ( $http_user_agent ~ MSIE ) {      rewrite ^(.*)$ http://www.baidu.com/ permanent; }

3)判断是否用手机等来登录的,是的话重写到其他页面

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

4)args指匹配url里任意字符的意思

if ($args ~* tid=2017){     return 500;}

在浏览器输入http://www.123.com/hahah/ddd?tid=2017,就会提示500 Internal Server Error ,而2017改成其他数字,则直接提示不存在页面,即not found

5)带着参数,实现伪静态,用户可以访问html,但是页面实际上是动态的php等,也就是php转成html的

rewrite   ^/([0-9]+)/lee/(.+)$     /phpinfo.php?tid/$1/items=$2     permanent;

比如说很难写下面的:
http://bbs.lee.com/forum.php?gid=68
相对来说,http://bbs.lee.com/thread-2221-1-1.html则比较美观。
语句为

rewrite ^/thread-([0-9]+)-1.html /forum.php?gid=$1 last;

$1就是代表前面括号里的[0-9]+,毕竟静态页面比较友好

6)访问的/直接指向phpinfo.php页面

rewrite  ^/$  /phpinfo.php break;

把phpinfo.php文件重定向为www.123.com,网址也会改,permanent是强制改变网址

rewrite  ^/phpinfo.php http://www.123.com/ permanent;

访问这个页面的时候重定向到back.jpg

rewrite  ^/linux/2019/$  /back.jpg last;

这里要注意如果是下面加了动静分离的语句,则会提示not found,因为已把.jpg格式给了下面的语句来处理

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

7)如果不存在访问的页面,则重定向到phpinfo.php页面,一般网站停止运行的时候会用到这个,就是为了防止404

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

这个重写语句的功能跟error_page 500 502 503 504 /50x.html;类似,都是错误时候的指向页面,所以两者可选其一。而50x.html则是在/usr/local/nginx/html/50x.html

原创粉丝点击