Nginx Rewrite使用场景及配置方法解析_nginx

来源:脚本之家  责任编辑:小易  

对2113url后面/以外的内从进行临时从定向,last的状态码是5261301例如你访问www.baidu.com/abc.html他最后会跳转到4102www.baidu.com/index.php/abc.html 这使用的是正则表达式,你1653如果对.* $之类的不明白,可以对照正则表达式。本回答被提问者和网友采纳,rewrite功能2113就是,使用nginx提供的全局5261变量或自己设置的变量,结合正则表达式4102和标志位实现url重写以及重1653定向.rewrite 格式为: rewrite 规则 定向路径 重写类型;规则可以是字符串或者正则来表示想匹配的目标urlrewrite ^/(.*)$ /index.php/$1 last;意思就是讲例如 www.xx.com/abc/bcd 解析为www.xx.com/index.php/abc/bcdlast 表示完成rewrite,浏览器地址栏URL地址不变还是显示 www.xx.com/abc/bcd 且rewrite后的/index.php/abc/bcd 会重新进行location匹配www.zgxue.com防采集请勿采集本网。

Nginx Rewrite使用场景

可能性很多.你rewrite.conf文件 内有严重错误,肯定会启动失败,. rewrite.conf路径不对也会启动失败.基本就这俩问题了吧

1.URL地址跳转,例如用户访问pm.com将其跳转到baidu.com或者当用户通过http的方式访问时,将其跳转至https的方式访问。

像如 rewrite ^/abc$ http://www.ppp.com:8080/aaa last;的这种跳转规则,作如下的解释: 如果rewrite指令的第二个参数(replacement)以http或者以https开头,则nginx内部会将该跳转作为临时重定向去处理,表现到http的响应就是会以302响应状态

2.URL伪静态,将动态页面显示为静态页面方式的一种技术,减少动态URL地址对外暴露过多的参数,提升更高的安全性。

对于nginx的各种指令而言,如果想知道该指令的配置格式和位置,那么比较好的一种方式就是查看nginx的源码,正所谓“源码面前,了无秘密”。 rewrite指令在nginx的http的rewrite模块中定义(src/http/ngx_http_rewrite_module.c)。查看一下该模块

3.搜索引擎SEO优化依赖于URL路径,以便支持搜索引擎录入

\w+ 匹配由数字、26个英文字母或者下划线组成的字符串 .* 意味着能够匹配任意数量的任何字符 $1-$9存放着正则表达式中最近的9个正则表达式的匹配结果,这些结果按照子匹配的出现顺序依次排列。 $1 代表的是匹配的第一个结果 括号表示的是表达式

4.可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

nginx的rewrite指令中可以通过设置该条rewrite的flag来对该规则进行说明。一般可以设置的flag有:last,break,redirect,permanent四种。 redirect说明,这条规则是一个临时的跳转,并且此时如果观察http请求的话,http的响应状态码为302. perm

配置语法

rewrite regex replacement [flag];

4中flag

last 停止处理后续rewrite指令集,跳出location作用域,并开始搜索与更改后的URI相匹配的location,URL地址不变

break 停止处理后续rewrite指令集,不会跳出location作用域,不再进行重新查找,终止匹配,URL地址不变

redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新自己的URL数据库

permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫会更新自己的URL数据库

注:使用last和break时浏览器中的地址不会改变,使用redirect和permanent则会改变

举例说明:

location /abc/ {  rewrite ^/abc/(.*) /whsir/$1 break;  return 401;}location /opq/ {  rewrite ^/opq/(.*) /whsir/$1 last;  return 402;}location /whsir/ {  return 403;}

输入abc后,如果能匹配到whsir的内容,则返回200,否则返回404

输入opq后,如果能匹配到whsir的内容,则返回403,否则返回404

last和break只返回一个状态码即成功或失败,redirect和permanent会先返回302或301,在返回成功或失败

常用的Nginx全局变量:

例:http://www.pm.com:99/aa/bb/test.php

$host        www.pm.com

$server_port     99

$request_uri     /aa/bb/test.php

$document_root   /pm_code

$request_filename  /pm_code/aa/bb/test.php

案例1:外部跳转

打开lb01虚拟机,先将之前的自定义配置文件关闭,新建/etc/nginx/conf.d/rewrite.conf

注:^/意思为以根(这里根目录为/pm_code,对应域名为www.pm.com)开头的url都会重定向到百度。

修改/etc/nginx/nginx.conf文件

将错误日志级别修改为notice使其能记录到重定向信息(debug, info, notice, warn, error, crit越靠前记录的信息越多)

在http模块中添加一行

rewrite_log on;(打开rewrite日志记录)

测试

在浏览器地址栏中输入www.pm.com(在hosts中已配置好),会重定向到百度首页

案例2:内部跳转

更改/etc/nginx/conf.d/rewrite.conf内容

在/pm_code中创建文件2.html(内容222),在浏览器中输入www.pm.com/1.html

在错误日志中查看记录

使用return

在上述方法中,浏览器地址栏中显示的是1.html,而网页内容是2.html的内容,如果想要地址栏中也显示2.html,将location中的内容更改为 return 302 /2.html; 或者 rewrite .* /2.html redirect;

使用正则

例:将www.pm.com/2020/* 重定向到 www.pm.com/2019/*

括号代表一个整体,$1代表前面第一个括号内的内容

将http跳转到https

注:nginx 1.14版本后可以不用写ssl on了,listen那里写成listen 443 ssl;

字面意思就是把2113abc.com/xxx按abc.com/index.php/xxx来解析对于/index.php/abc这种url,Apache和lighttpd会按5261"index.php?abc"来解释,而nginx会认4102为是请求名字是“index.php”的1653目录下的abc文件的内容。所以一些框架,如CI,在nginx下不配置rewrite是无法运行的,而在Apache和lighttpd则正常。另外,好像nginx里index.php会转换成index_php,(未求证)解决方法是location /{index index.php;if (!-e $request_filename) {rewrite ^/(.*)$ /index.php?$1 last;break;}},非常好用,很灵活,可以让你的服务器支持更多复杂业务内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • linux下给nginx安装waf模块
  • nginx 内置变量详解及隔离进行简单的拦截
  • nginx 上传大文件超时解决办法
  • 高性能web开发 nginx http服务器篇
  • nginx配置支持thinkphp的path_info
  • linux中nginx反向代理下的tomcat集群(详解)
  • nginx防御ddos攻击的配置方法教程
  • 深入浅析nginx虚拟主机
  • nginx 出现 403 forbidden 最终解决方法
  • 详解nginx 和 php 的两种部署方式的对比
  • 怎么理解 nginx 中 rewrite 的用法
  • nginx 配置问题 rewrite ^/(.*)$ /index.php/$1 la...
  • 如何打开nginx rewrite log
  • nginx rewrite规则怎么配置
  • 为什么在Nginx的nginx.conf配置文件中,加入includ...
  • nginx 用rewrite重定向 如何保持url不变
  • nginx rewrite 在哪配置
  • 关于nginx中的rewrite问题
  • nginx rewrite中 redirect permanent有什么区别
  • 怎么查看 nginx 支持rewrite
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginx url重写rewrite机制原理及使用实例nginx rewrite使用场景及代码案例详解nginx rewrite正则匹配重写的方法示例详解nginx中location、rewrite用法总结nginx rewrite 实现url跳转的方法详解常用的nginx rewrite重写规则详解nginx配置location总结及rewrite规则写法详解nginx rewrite和根据url参数locationlinux下给nginx安装waf模块nginx 内置变量详解及隔离进行简单的拦截nginx 上传大文件超时解决办法高性能web开发 nginx http服务器篇nginx配置支持thinkphp的path_infolinux中nginx反向代理下的tomcat集群(详解)nginx防御ddos攻击的配置方法教程深入浅析nginx虚拟主机nginx 出现 403 forbidden 最终解决方法详解nginx 和 php 的两种部署方式的对比nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪详解nginx服务器中配置超时时间的nginx下301重定向域名的方法小结windows下nginx+php5的安装与配置nginx实现负载均衡的方法总结nginx服务器中的重定向配置参考指南简单谈谈nginx基础知识入门nginx抢购限流配置实现解析nginx已编译的nginx-添加新模块centos6.6 安装 tengine 笔记centos6使用nginx搭建web网站服务的方法nginx0.5.33+php5.2.5(fastcgi)搭建胜过alinux下用nginx作perl程序服务器及其中penginx升级到支持http2.0的方法示例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved