一:nginx  Rewrite 规则

1rewrite的概念:

Nginx Rewrite功能是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现URL重写以及重定向功能。Rewrite指令只能放在server {},location {},if {}中,并且只能对域名后边的除去传递的参数外的字符串起作用。

Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)的语法进行规则匹配,如果需要Nginx的Rewrite功能,在编译安装Nginx之前,必须安装PCRE库。

例如: Rich Products Corporation | Global Food Supplier Serving Foodservice, In-Store Bakery, Retail & Industrial Markets 只对URL中的/a/we/index.php等字符串起作用。

URL是Uniform Resource Location的缩写,译为“统一资源定位符”

2rewrite的语法:

rewrite 正则表达式  更换目标 [标志位]

rewrite和location功能有点像,都能实现跳转。主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对路径做控制访问或反向代理,可以使用proxy_pass代理到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

《1》:执行server块的rewrite指令

《2》:执行location匹配

《3》:执行选定的location中的rewrite指令

注意:如果其中某步URL被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 intelnal Server Error错误。

3:flag标志位

《1》:last:相当于Apache的[L]标记,表示完成rewrite。

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

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

《4》:permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

last一般写在server和if中,而break一般使用在location中

last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配

break和last都能组织继续执行后面的rewrite指令

last和break用来实现URL重写,浏览器地址栏URL地址不变

redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址

4:if指令

语法为if(condition){…},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(condition)可以是如下任何内容:

当表达式只是一个变量时,如果其值为空或任何以0开头的字符串都会当作条件为false

直接比较变量和内容时,使用=或!=

《1》:-f和!-f                           用来判断是否存在文件

《2》:-d和!-d                用来判断是否存在目录

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

《4》:-x和!-x                用来判断文件是否可执行

例如:http://www.a.com/a/b/test.html

If ($http_user_agent ~ MSIE) {

Rewrite ^(.*)$ /msie/$1 break;

}                        #如果UA包含“MSIE“,rewrite请求到/msie/目录下

If ($request_method = POST) {

Return 405;

}                        #如果提交方法为POST,则返回状态405(Method not allowed)。Return不能返回301,302

注意:因为返回301和302不能只返回状态码,还必须有重定向的URL,所以return指令无法返回301,302

If ($slow) {

Limit_rate 10k;

}                #限速,$slow可以通过set指令设置

If (!-f $request_filename) {

break;

proxy_pass http://127.0.0.1;

}                #如果请求的文件名不存在,则反向代理到location。这里的break也是停止rewrite检查

If ($args ~ post=140) {

rewrite ^ Example Domain permanent;

}                #如果query string中包含“post=140“,永久重定向到example.com

location ~* \.(gif | jpg | swf | flv)$ {

5nginx变量

下面是可以用作if判断的变量

$args:                        记录请求行中的参数,同$query_string

$content_length:            记录请求头中的Content-length字段。

$content_type:                记录请求头中的Content-Type字段。

$document_root:           记录当前请求在root指令中指定的值。

$host :                        记录请求主机头字段,否则为服务器名称。

$http_user_agent:          记录用于记录客户端浏览器的相关信息

$http_cookie:                记录客户端cookie信息

$limit_rate:                           记录可以限制连接速率。

$request_method:          记录客户端请求的动作,通常为GET或POST。

$request_filename:         记录当前请求的文件路径,由root或alias指令与URI请求生成。

$scheme :                        记录HTTP方法(如http,https)。

$server_protocol:            记录请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr:                记录服务器地址,在完成一次系统调用后可以确定这个值。

$server_name:                记录服务器名称。

$server_port:                记录请求到达服务器的端口号。

$request_uri:                记录包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。

$uri:                                记录不带请求参数的当前URI,$uri不包含主机名,如”http://www.a.com/foo/bar.php”。

$document_uri:        与$uri相同。

$http_x_forwarded_for        记录远程客户端的ip地址

$remote_addr:                记录远程客户端的IP地址。

$remote_port:                记录远程客户端的端口。

$remote_user                           记录远程客户端用户名称

$time_local                        记录访问时间及时区

$request                         记录请求的URL与HTTP协议

$status                           记录请求的状态,例如成功时为200,页面找不到时为404

$body_byte_sent                记录发送给客户端的文件主体内容大小

$http_referer                        记录是从哪个页面链接访问过来的

安装nginx

《1》:rz  上传软件包

《2》: tar xf nginx-1.18.0.tar.gz -C /usr/src/  解压

《3》:cd /usr/src/nginx-1.18.0/  切换目录

《4》:yum -y install pcre-devel zlib-devel openssl-devel  安装依赖包

《5》:useradd -M -s /sbin/nologin nginx  创建用户

《6》 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream  编译安装

《7》:make && make  install  编译安装

《8》:ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/  创建链接

《9》:nginx -t  检查语法

实现域名跳转

《1》:编辑本机的hosts文件C:\Windows\System32\drives\etc\hosts

《2》:编辑的内容:

192.168.100.10 www.jd.com

192.168.100.10 www.360buy.com

《3》:vim /etc/hosts  编辑hosts文件

《4》:写入

192.168.100.10 www.jd.com

192.168.100.10 www.360buy.com

《5》:cd /usr/local/nginx/conf 切换目录

《6》:cp nginx.conf  nginx.conf.bak  拷贝

《7》:vim nginx.conf  编辑文件

《8》:修改

server {

listen       80;

server_name  www.jd.com;

charset utf-8;

root   html;

index  index.html index.htm;

if ($host = "www.360buy.com") {

rewrite ^(.*)$ ! permanent;

}

《9》:nginx  启动服务

《10》:netstat -lnpt |grep 80  查看端口

《11》:访问 www.360buy.com (注:他访问的是 www.360buy.com 跳转到 www.jd.com。)

nginx Rewrite 规则相关推荐

  1. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)...

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  2. nginx rewrite规则语法

    在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置. 因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑 ...

  3. nginx rewrite规则语法(关于break和last分析得很好)

    在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置. 因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑 ...

  4. 运维之道 | Nginx rewrite 规则详解

    Nginx rewrite 规则详解 一.rewrite规则概念 rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言, ...

  5. Nginx rewrite规则

    目录: rewrite概念 rewrite示例 rewrite概念 Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言 ...

  6. Nginx rewrite 规则详解

    Nginx rewrite规则详解 rewire规则也称为规则重写,主要功能是实现浏览器访问 Http Uri的跳转,其正则表达式是基于Perl语言.通常而言,几乎所有的Web服务器均可以支持URL重 ...

  7. nginx rewrite规则指南

    nginx rewrite规则指南 任何重写规则的第一部分都是一个正则表达式 可以使用括号来捕获,后续可以根据位置来将其引用,位置变量值取决于捕获正则表达式中的顺序,1引用第一个括号中的值,1引用第一 ...

  8. Nginx rewrite规则实现http跳转到https及301永久重定向

    Nginx rewrite规则实现http跳转到https及301永久重定向 环境准备: [root@ubuntu1804 ~]#curl https://linux2022.com -Ik HTTP ...

  9. Nginx Rewrite规则初探

    Nginx  rewrite(nginx url地址重写) Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要N ...

最新文章

  1. easyui中的tree数据使用说明
  2. Mybatis 的工作原理,写得太好了!
  3. 小学三年级上册计算机计划,小学三年级数学上册教学计划
  4. express html页面,Express使用html模板
  5. 春天樱花飘落flash源文件
  6. 利用动软代码生成器-------.net链接SQl数据库
  7. 解决Linux系统下字体没有宋体和黑体问题
  8. 计算机能不能升级固态硬盘,笔记本升级固态硬盘后会怎样?秒懂
  9. Wangle源码分析:ClientBootstrap
  10. PHP人才匮乏,月入万元不是梦
  11. 彻查手机端浏览博客园出现广告一事!
  12. ChatGPT4高分通过数据库系统工程师(DBA)认证
  13. 为什么华为手机总有不明照片?赶紧查看一下这3个功能,尽快关闭
  14. 计算机网络实用知识,计算机网络实用技术知识点之ISDN的定义及特性
  15. ADB局域网连接手机进行调试项目
  16. 新版标准日本语中级_第二十四课
  17. nas套件php5.2,NAS | 群晖安装 qBittorrent 套件并优化设置、替换 UI(非 docker 安装) | 醉渔小站...
  18. java socket使用udp协议与局域网群聊软件feiQ通信
  19. 云端数据库的春天真来了
  20. 发现ThinkPad比Dell的电脑强多了...

热门文章

  1. GridView控件实现分页
  2. 修改注册表,关闭window系统自动更新服务
  3. 散打地震波分辨率增强 (纯讨论)
  4. WPF 控件专题 Lable 控件详解
  5. php国外地址生成,生成讯雷地址php代码
  6. sql实现四舍五入保留两位小数,小数不足自动补0
  7. WrapPanel 实现虚拟化
  8. 如何将html转换为wmv,[转]Html中添加.wmv视频文件-Windows Media Player
  9. 如何使用PowerPoint在幻灯片背景中添加DRAFT水印?
  10. HTML + CSS 的一些技巧 (萌新来看!)