nginx的rewrite

本文详细介绍了URL重写的实现方式及常见应用场景,包括如何使用不同的结尾标识符、正则表达式进行路径匹配以及条件判断等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 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]                           不匹配字符串:string
hello|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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值