[转帖]Nginx:地址重写(return和rewrite)

nginx,地址,重写,return,rewrite · 浏览次数 : 0

小编点评

**Return 指令** ```nginx server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; } ``` 当客户端请求旧域名 `olddomain.com` 时,nginx 会自动重定向到新域名 `newdomain.com` 上的同名页面。 **Rewrite 指令** ```nginx location = /tutorial/learning-nginx { return 301 $scheme://example.com/nginx/understanding-nginx} } ``` 当客户端请求 `/tutorial/learning-nginx` 时,nginx 会自动重定向到 `example.com/nginx/understanding-nginx` 上的页面。 **区别** * **Return 指令**只返回 301 重定向,不会进行任何动态替换。 * **Rewrite 指令**可以进行动态替换,通过 `$1`、`$2`等变量获取请求参数并进行替换。 **示例** ``` **Return 指令** ``` location = /nginx-tutorial { rewrite ^/nginx-tutorial?$ /somePage.html last; } ``` 当客户端请求 `/nginx-tutorial` 时,nginx 会自动重定向到 `somePage.html` 上的页面。 ****Rewrite 指令** ``` location = /user.php { rewrite ^/user.php?id=([0-9]+)$ /user/$1 last; } ``` 当客户端请求 `/user.php?id=11` 时,nginx 会自动重定向到 `user/11` 上的页面。

正文

https://www.cnblogs.com/testopsfeng/p/15294660.html

Nginx的重写指令用于改变客户端的URL请求。主要有returnrewrite。两个指令都有重写URL的能力,但rewrite支持更复杂的功能。

Return指令

server中返回 301 重定向:

server {
        listen 80;
        server_name www.olddomain.com;
        return 301 $scheme://www.newdomain.com$request_uri;
}

在 location中返回 301 重定向:

location = /tutorial/learning-nginx {
     return 301 $scheme://example.com/nginx/understanding-nginx
}

Rewrite指令

语法介绍

rewrite regex replacement-url [flag];
  • regex: 正则表达式
  • replacement-url: 替换的URL
  • flag: 用于进行一些额外的处理

不同flag的效果:

flag说明
last 停止解析,并开始搜索与更改后的URI相匹配的location;
break 中止 rewrite,不再继续匹配
redirect 返回临时重定向的 HTTP 状态 302
permanent 返回永久重定向的 HTTP 状态 301

注意:rewrite只能返回301和302状态码,如果需要返回其他状态码,可以在rewrite命令后使用return

案例

简单案例

https://example.com/nginx-tutorial重写为https://example.com/somePage.html

location = /nginx-tutorial 
{ 
    rewrite ^/nginx-tutorial?$ /somePage.html last; 
}
动态替换案例

https://www.example.com/user.php?id=11重写为https://exampleshop.com/user/11

location = /user.php 
{ 
    rewrite ^/user.php?id=([0-9]+)$ /user/$1 last; 
}

其中$1表示regex中第一个括号中的值,第二个括号中的值可通过$2获取

手机访问重定向网址

https://www.example.com重写为https://m.exampleshop.com

location = /
{
    if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
    rewrite ^(.*) https://m.example.com$1 redirect;
    }
}

与[转帖]Nginx:地址重写(return和rewrite)相似的内容:

[转帖]Nginx:地址重写(return和rewrite)

https://www.cnblogs.com/testopsfeng/p/15294660.html Nginx的重写指令用于改变客户端的URL请求。主要有return和rewrite。两个指令都有重写URL的能力,但rewrite支持更复杂的功能。 Return指令 在server中返回 301

[转帖]Nginx中的Rewrite的重定向配置与实践

https://www.cnblogs.com/tugenhua0707/p/10798762.html 阅读目录 一:理解地址重写 与 地址转发的含义。 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能

[转帖]nginx(三十二)rewrite模块

一 官方rewrite模块 ① 模块涉及的指令 ② 基本简介 rewrite模块会根据'PCRE正则'匹配'重写URI' pcre下载地址 pcretest测试正则表达式 ③ break 疑惑点: 结束'该作用域'下剩余的指令,还是'只是该rewrite模块的'指令? 1)配置demo 2)不带参数

[转帖]企业nginx简单配置

https://www.jianshu.com/p/6a3e298b31be 第五章 企业简单应用 网站访问方式 1.基于域名访问www.baidu.com 基于IP地址访问172.16.1.7配置文件地址被改动一定要重启服务 基于端口访问10.0.0.51:80 修改扩展配置文件端口信息后访问时优

[转帖]Nginx 反向代理地址后,session丢失,不能登录的问题

https://www.cnblogs.com/fan-yuan/p/14417255.html 设置反向代理后,session丢失无法正常登录,需按照如下格式设置即可location /aaaaa/bbbbbb { #代理跳转的路径 proxy_pass http://localhost:8080

[转帖]Nginx之ngx_http_realip_module

https://www.jianshu.com/p/80a779b3bf20 问题描述 今日在线上查询nginx日志文件的用户真实IP时,发现remote_addr和XFF地址一模一样,这点让我很是不理解,正常来讲remote_addr应该获取到的是上一个节点转发的IP地址,我们却是获得了用户的真实

[转帖]nginx 反向代理 URL替换方案

nginx 提供反向代理服务,日常开发过程中有时候我们需要使用nginx 作为代理服务根据url的不同去访问不同的服务器或者不同端口,如下提供两种方案。 1.直接替换location 匹配部分 1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼

[转帖]nginx 反向代理 URL替换方案

nginx 提供反向代理服务,日常开发过程中有时候我们需要使用nginx 作为代理服务根据url的不同去访问不同的服务器或者不同端口,如下提供两种方案。 1.直接替换location 匹配部分 1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼

[转帖]浅析Nginx配置获取客户端真实IP的proxy_set_header、X-Real-IP、$remote_addr、X-Forwarded-For、$proxy_add_x_forwarded_for分别是什么意思

https://www.cnblogs.com/goloving/p/15588668.html 一、问题背景 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是

[转帖]使用SkyWalking监控nginx (以openresty为例)

https://www.cnblogs.com/hahaha111122222/p/15829737.html 安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs.com/sanduzxcvbnm/p/15829781.html 使用SkyWalking监控ngi