Nginx之9易筋神功 - (URL重写)

简介: Nginx从入门到深入之URL重写

什么是Rewrite

Nginx Rewrite其实就是使用ngx_http_rewrite_module模块进行跟进用户请求的内容进行规则匹配及匹配内部location或者进行URL重定向。
clipboard

为什么要使用Rewrite

  1. 使用户访问的URI更加规范
  2. 网站更换新域名后或迁移后用户重定向
  3. 根据客户端、人群、变量等信息进行个性化跳转
  4. 网站强制需要使用https进行访问

Rewrite执行流程

  1. 执行server段中的rewrite
  2. 执行location匹配
  3. 执行location中的rewrite

# 执行的语法 rewrite regex replacement [flag];

如何配置Rewrite

场景1. 强制使用https访问

server {
        listen 80;
        server_name nginx.yekangming.com;
        rewrite ^/(.*) https://www.yekangming.com/$1 permanent;
}

场景2. 规范uri

server {
listen 80;
server_name nginx.yekangming.com;
       location / {
            root /data/webroot/nginx;
       }

        location /shopping {
            root /data/webroot/shopping;
        }

        location /payment {
            root /data/webroot/payment
        }
        ....
    }

场景3. 判断特定请求

server {
        listen 80;
        server_name nginx.yekangming.com;

        if ($request_method = POST) {
            return 405;
        } 

        location ~* /\.(sql|bak|exe|sh)$ {
            deny all;
        }
}

if指令

if判断指令在做个性化的场景经常使用,例如用于判断手机是安卓还是IOS或者浏览器种类等。可以配合变量进行一系列的操作。

if(condition) {
...
}

Rewrite相关的变量

$args:变量中存放了URL中的指令
$content_length:保存了请求报文头部中的content-lenght字段
$content_type:保存了请求头部中的content-type字段
$document_root:保存了针对当前资源的请求的系统根目录
$document_uri:保存了当前请求中不包含指令的URI,主注意是不包含请求的指令
$host:存放了请求的服务器名称
$http_user_agent:客户端浏览器的详细信息
$http_cookie:客户端的cookie信息
$limit_rate:如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_addr:存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP
$remote_port:客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user:已经经过Auth Basic Module验证的用户名
$request_body_file:做反向代理时发给后端服务器的本地资源的名称
$request_method:请求资源的方式,GET/PUT/DELETE等
$request_filename:当前请求的资源文件的路径名称,由root或alias指令与URI请求生成
$request_uri:包含请求参数的原始URI,不包含主机名
$squery_string:保存了URL请求的指令,与 $args相同
$scheme:请求的协议,如ftp,https,http等
$server_protocpl:保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr:保存了服务器的IP地址
$server_name:服务器的主机名
$server_port:服务器的端口号
$uri:与$document_uri相同,是一个不包含指令的uri地址

正则表达式元字符

.     :匹配除换行符以外的任意字符
?     :重复0次或1次
+     :重复1次或更多次
*     :重复0次或更多次
\d    :匹配数字
^     :匹配字符串的开始字符
$     :匹配字符串的结束字符
{n}   :重复n次
{n,}  :重复n次或更多次
[c]   :匹配单个字符c
[a-z] :匹配a-z小写字母的任意一个

标志位

last : 相当于Apache的[L]标记,表示完成rewrite
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址

小知识

  1. Rewrite总次数不能超过10次,否则Nginx会返回状态码500报错并在浏览器提示网站重定向次数过多。
目录
相关文章
|
8月前
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
317 0
|
9月前
|
前端开发 应用服务中间件 API
Nginx 反向代理 去除 路径匹配规则url
Nginx 反向代理 去除 路径匹配规则url
|
应用服务中间件 nginx
Nginx反向代理/location/URL重写功能实战
一、Nginx反向代理常用实战 二、location 应用实例
Nginx反向代理/location/URL重写功能实战
|
1月前
|
JavaScript Windows
VUE部署到IIS中报404错误解决方案-配置URL重写
VUE部署到IIS中报404错误解决方案-配置URL重写
|
7月前
|
iOS开发
解决alert在ios版微信中显示url的问题(重写alert)
解决alert在ios版微信中显示url的问题(重写alert)
69 0
|
8月前
|
安全 应用服务中间件 Apache
|
应用服务中间件 网络安全 nginx
通过Nginx搭建自建URL转发
通过Nginx搭建自建URL转发
270 0
|
缓存 应用服务中间件 Shell
Nginx实战(二) URL重写
Nginx实战(二) URL重写
132 0
|
移动开发
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
161 0
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
|
安全 搜索推荐 应用服务中间件
Nginx的rewrite地址重写
Nginx的rewrite地址重写
174 0
Nginx的rewrite地址重写