015.Nginx重定向
一 重定向概述
1.1 重定向介绍
- 将一串很长的网址,转成较短的网址,从而实现便于传播、易于记忆。
- 调整或更换Web服务器,网址(域名)又必须要变更(如访问目录、访问扩展名HTML变为PHP、访问域名),为了能使旧的访问依旧生效,从而实现自动重定向到新的网站。
1.2 类似概念
1.3 重定向状态码
1.4 涉及符号
- 正则表达式
1 ~ #表示匹配过程中区分大小写;
2 ~* #表示匹配过程中不区分大小写;
3 !~ #如果 '~' 匹配失败时,那么该条件就为true;
4 !~* #如果 '~*' 匹配失败时,那么该条件就为true。
1 if ($http_user_agent ~ MSIE) {
2 ……
3 }
1 if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" ){
2 rewrite ^/$ http://www.cnblogs.com permanent;
3 }
- 文件匹配
1 -f #如果请求的文件存在,那么该条件为true;
2 !-f #如果该文件的目录存在,该文件不存在,那么返回true。如果该文件和目录都不存
1 if (-f $request_filename) {
2 ……
3 }
1 if (!-f $request_filename) {
2 ……
3 }
- 目录匹配
1 -d #如果请求的目录存在,则返回true。否则返回false;
2 !-d #如果请求的目录不存在,但是该请求的上级目录存在,则返回true。如果该上级目录不存在,则返回false。
3 -e和!-e #用来判断是否存在文件或目录
4 -x和!-x #用来判断文件是否可执行
- flag标记
1 last #表示完成rewrite,之后继续向下匹配新的location URI规则,浏览器地址栏URL地址不变。
2 break #本条规则匹配完成后,终止匹配, 不再匹配后面的规则,完成重写指令,浏览器地址栏URL地址不变。
3 redirect #返回302临时重定向,浏览器地址会显示跳转新的URL地址。
4 permanent #返回301永久重定向,浏览器地址会显示跳转新的URL地址。
- 其他全局变量
1 $args #该变量中存放了请求URL中的请求指令,同$query_string;
2 $content_length #该变量中存放了HTTP请求头中的Content-length字段。;
3 $content_type #该变量中存放了HTTP请求头中的Content-type字段;
4 $document_root #该变量中存放了针对当前请求的根路径。
5 $document_uri #该变量中存放了请求的当前URI, 但是不包括请求指令;
6 $host #变量中存放了请求的URL中的主机部分字段,如果请求中没有Host行,则等于设置的服务器名;
7 $http_host #该变量与$host唯一区别带有端口号;
8 $http_user_agent #该变量中存放客户端的代理信息;
9 $http_cookie #该变量中存放客户端的cookie信息。
10 $limit_rate #对连接速率的限制;
11 $request_method #请求的方法,比如"GET"、"POST"等;
12 $remote_addr #该变量中存放客户端的地址;
13 $remote_port #该变量中存放了客户端与服务器建立连接的端口号;
14 $remote_user #该变量中存放客户端的用户名,认证用;
15 $request_filename #该变量中存放了当前请求的资源文件的路径名;
16 $request_body_file #该变量中存放了发给后端服务器的本地文件资源的名称;
17 $request_method #该变量中存放了客户端的请求方式,比如 'GET'、'POST'等。
18 $request_uri #该变量中存放了当前请求的URI,并且带请求指令,即带查询字符串,不包含主机名,如:”/foo/bar.php?arg=baz”;
19 $query_string #与$args相同;
20 $scheme #该变量中存放了客户端请求使用的协议,比如http或者是https;
21 $server_protocol #该变量中存放了客户端请求协议的版本请求的协议版本,"HTTP/1.0"或"HTTP/1.1";
22 $server_addr #服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
23 $server_name #请求到达的服务器名;
24 $server_port #请求到达的服务器端口号;
25 $uri #请求的URI,可能和最初的值有不同,比如经过重定向之类的。
1 $host:demo.linuxds.com
2 $server_port:88
3 $request_uri:http://demo.linuxds.com:88/test1/test2/test.php
4 $document_uri:/test1/test2/test.php
5 $document_root:/var/www/html
6 $request_filename:/var/www/html/test1/test2/test.php
1.5 return释义
1 server{
2 listen 80;
3 server_name www.linuxds.com;
4 return 403;
5 rewrite /(.*) /abc/$1; #该行配置位于return后,则不会被执行。
6 }
1 server {
2 .....
3
4 if ($request_uri ~ "\.htpasswd|\.bak")
5 {
6 return 404;
7 rewrite /(.*) /aaa.txt; #该行配置位于return后,则不会被执行。
8 }
9 #如下为其他server,不受上一个server中的return影响,即若下面还有其他配置,会被执行。
10 .....
11 }
1 server{
2 listen 80;
3 server_name www.linuxds.com;
4 return 200 "hello";
5 }
1 location ^~ /aming {
2 default_type application/json ;
3 return 200 '{"name":"xhy","id":"100"}';
4 } #返回的字符串也支持json数据。
1 location /test {
2 return 200 "$host $request_uri";
3 } #返回的字符串也支持变量
1 server{
2 listen 80;
3 server_name www.linuxds.com;
4 return http://www.linuxds.com/123.html;
5 rewrite /(.*) /abc/$1; #该行配置位于return后,则不会被执行。
6 }
二 重定向配置
2.1 配置语法
1 rewrite ^/(.*) http://www.baidu.com/$1 permanent;
2.2 配置示例01
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite01.conf
2 server {
3 listen 80;
4 server_name cnblogs.linuxds.com;
5 access_log /var/log/nginx/cnblogs.access.log main;
6 error_log /var/log/nginx/cnblogs.error.log warn;
7 location / {
8 if ($host = 'cnblogs.linuxds.com') {
9 rewrite ^/(.*) http://www.cnblogs.com redirect;
10 }
11 }
12 }
1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf #检查配置文件
2 [root@nginx01 ~]# nginx -s reload #重载配置文件

2.2 配置示例02
1 [root@nginx01 ~]# mkdir /usr/share/nginx/file/
2 [root@nginx01 ~]# echo '<h1>File</h1>' > /usr/share/nginx/file/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite02.conf
2 server {
3 listen 80;
4 server_name file.linuxds.com;
5 access_log /var/log/nginx/file.access.log main;
6 error_log /var/log/nginx/file.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/file;
9 if ( !-e $request_filename ) {
10 rewrite ^ http://www.cnblogs.com redirect;
11 }
12 }
13 }


2.3 配置示例03
1 [root@nginx01 ~]# mkdir /usr/share/nginx/constant/
2 [root@nginx01 ~]# echo '<h1>Constant</h1>' > /usr/share/nginx/constant/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite03.conf
2 server {
3 listen 80;
4 server_name constant.linuxds.com;
5 access_log /var/log/nginx/constant.access.log main;
6 error_log /var/log/nginx/constant.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/constant;
9 if ( !-e $request_filename ) {
10 rewrite ^ /itzgr/ break;
11 proxy_pass http://www.cnblogs.com;
12 }
13 }
14 }

2.4 配置示例04
1 [root@nginx01 ~]# mkdir /usr/share/nginx/last/
2 [root@nginx01 ~]# echo '<h1>Last</h1>' > /usr/share/nginx/last/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite04.conf
2 server {
3 listen 80;
4 server_name last.linuxds.com;
5 access_log /var/log/nginx/last.access.log main;
6 error_log /var/log/nginx/last.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/last;
9 rewrite /last.html /index.html last;
10 }
11 }


2.5 配置示例05
1 [root@nginx01 ~]# mkdir /usr/share/nginx/break/
2 [root@nginx01 ~]# echo '<h1>Break</h1>' > /usr/share/nginx/break/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite05.conf
2 server {
3 listen 80;
4 server_name break.linuxds.com;
5 access_log /var/log/nginx/break.access.log main;
6 error_log /var/log/nginx/break.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/break;
9 rewrite /break.html /index.html break;
10 }
11 }


2.6 配置示例06
1 [root@nginx01 ~]# mkdir /usr/share/nginx/rewrite/
2 [root@nginx01 ~]# echo '<h1>Rewrite</h1>' > /usr/share/nginx/rewrite/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite06.conf
2 server {
3 listen 80;
4 server_name rewrite.linuxds.com;
5 access_log /var/log/nginx/rewrite.access.log main;
6 error_log /var/log/nginx/rewrite.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/rewrite;
9 rewrite /rewrite.html /index.html redirect;
10 }
11 }


2.7 配置示例07
1 [root@nginx01 ~]# mkdir /usr/share/nginx/permanent/
2 [root@nginx01 ~]# echo '<h1>Permanent</h1>' > /usr/share/nginx/permanent/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite07.conf
2 server {
3 listen 80;
4 server_name permanent.linuxds.com;
5 access_log /var/log/nginx/permanent.access.log main;
6 error_log /var/log/nginx/permanent.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/permanent;
9 rewrite /permanent.html /index.html permanent;
10 }
11 }


2.8 配置示例08
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/dirweb/dir
2 [root@nginx01 ~]# echo '<h1>Dirweb</h1>' > /usr/share/nginx/dirweb/dir/index.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite08.conf
2 server {
3 listen 80;
4 server_name dirweb.linuxds.com;
5 access_log /var/log/nginx/dirweb.access.log main;
6 error_log /var/log/nginx/dirweb.error.log warn;
7 location ~ .* {
8 root /usr/share/nginx/dirweb/;
9 rewrite ^/html/(.+?).html$ /dir/$1.html permanent;
10 }
11 }


2.9 配置示例09
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/lbreak
2 [root@nginx01 ~]# echo '<h1>Lbreak</h1>' > /usr/share/nginx/lbreak/index.html
3 [root@nginx01 ~]# echo '<h1>Test_Lbreak</h1>' > /usr/share/nginx/lbreak/test.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite09.conf
2 server {
3 listen 80;
4 server_name lbreak.linuxds.com;
5 access_log /var/log/nginx/lbreak.access.log main;
6 error_log /var/log/nginx/lbreak.error.log warn;
7 root /usr/share/nginx/lbreak/;
8 location / {
9 rewrite /last/ /test.html last;
10 rewrite /break/ /test.html break;
11 }
12 location = /test.html {
13 return http://www.cnblogs.com;
14 }
15 }


2.10 配置示例10
1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/admin/xhy
2 [root@nginx01 ~]# echo '<h1>Admin</h1>' > /usr/share/nginx/admin/admin.html
1 [root@nginx01 ~]# vi /etc/nginx/conf.d/rewrite10.conf
2 server {
3 listen 80;
4 server_name admin.linuxds.com;
5 access_log /var/log/nginx/admin.access.log main;
6 error_log /var/log/nginx/admin.error.log warn;
7 root /usr/share/nginx/admin/;
8 location / {
9 rewrite /xhyadmin.html /admin.html break;
10 }
11 location /admin.html {
12 return 403;
13 }
14 }


三 其他简略配置
1 # 如果文件不存在则返回400
2 if (!-f $request_filename) {
3 return 400;
4 }
1 # 如果host不是demo.linuxds.com,则301到www.baidu.com中
2 if ( $host != 'demo.linuxds.com' ){
3 rewrite ^/(.*)$ https://www.baidu.com/$1 permanent;
4 }
1 # 如果请求类型不是POST则返回405
2 if ($request_method = POST) {
3 return 405;
4 }
1 # 如果参数中有 a=1 则301到demo.linuxds.com
2 if ($args ~ a=1) {
3 rewrite ^ http://demo.linuxds.com/ permanent;
4 }
1 # 如果客户使用IE浏览器访问,则重定向到/nginx-ie目录下:
2 if ($http_user_agent ~ MSIE) {
3 rewrite ^(.*)$ /nginx-ie/$1 break;
4 }
1 # 多目录重定向为参数的形式。
2 # 将xhy.linuxds.com/images/girl 重定向为 xhy.linuxds.com/index.php?act=images&name=xhy&id=girl参数的形式。
3 if ($host ~* (.*)\.domain\.com) {
4 set $sub_name $1;
5 rewrite ^/images\/(\d+)\/?$ /index.php?act=images&cid=$sub_name&id=$1 last;
6 }
1 # 将目录对调,/images/girl -> /girl?id=images。
2 rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
1 # 目录通过重定向自动追加/
2 if (-d $request_filename){
3 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
4 }
1 # 简单域名重定向
2 server
3 {
4 listen 80;
5 server_name xhy.linuxds.com;
6 index index.html index.htm index.php;
7 root /usr/share/nginx/xhy/;
8 rewrite ^/ http://www.cnblogs.com;
9 access_log off;
10 }
11 server {
12 listen 80;
13 server_name linuxds.com www.linuxds.com;
14 if ($host != 'www.linuxds.com' ) {
15 rewrite ^/(.*)$ http://www.linuxds.com/$1 permanent;
16 }
17 }
1 # 指定域名重定向
2 server_name xhy.linuxds.com xhy.linuxds.cn;
3 index index.html index.htm index.php;
4 root /usr/share/nginx/xhy/;
5 if ($host ~ "linuxds\.cn") {
6 rewrite ^(.*) http://xhy.linuxds.com$1/ permanent;
7 }
1 # 多域名重定向
2 server_name xhy.linuxds.com xhy.linuxds.cn xhy.linuxds.net;
3 index index.html index.htm index.php;
4 root /usr/share/nginx/xhy/;
5 if ($host !~ "linuxds\.com") {
6 rewrite ^(.*) http://xhy.linuxds.com/$1 permanent;
7 }
1 # 三级域名跳转。
2 if ($http_host ~* "^(.*)\.i\.linuxds\.com$") {
3 rewrite ^(.*) http://xhy.linuxds.com$1/;
4 break;
5 }
1 # 域名镜像
2 server
3 {
4 listen 80;
5 server_name mirror.linuxds.com;
6 index index.html index.htm index.php;
7 root /usr/share/nginx/xhy/;
8 rewrite ^/(.*) http://xhy.linuxds.com/$1 last;
9 access_log off;
10 }
015.Nginx重定向的更多相关文章
- nginx重定向规则入门
nginx重定向规则的入门实例 时间:2015-12-17 15:18:03来源:网络 导读:nginx重定向规则,Nginx的重定向模块HttpRewriteModule的用法说明,nginx重定向 ...
- nginx重定向规则详细介绍
为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名.网页的扩展名改变.网站域名改变等.如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个4 ...
- nginx 重定向 说明
一.nginx 两个操作系统的安装见以前的随笔(已安装请跳过) linux上搭建nginx windows上搭建nginx 二.Nginx重定向——直接到项目,而非nginx欢迎页 默认ngin修改n ...
- linux中nginx重定向方法总结
linux中nginx 301重定向跳转方法总结 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码代码如下: server { server_naaaaaaame www.aa ...
- nginx rewrite arg 带问号的地址转发参数处理?Nginx重定向的参数问题
Nginx重定向的参数问题 在给某网站写rewrite重定向规则时,碰到了这个关于重定向的参数处理问题.默认的情况下,Nginx在进行rewrite后都会自动添加上旧地址中的参数部分,而这对于重定向到 ...
- 【转】 nginx重定向规则详细介绍
rewrite命令 nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,loc ...
- nginx 重定向到系统维护页面
上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx重定向到固定系统维护页面. ng ...
- nginx重定向配置
# /etc/nginx/nginx.conf #写在server,location核心模块中,if也可以写.$http_host客户端设法要到达主机的主机名 if ($http_host !~ “^ ...
- Nginx重定向[Rewrite]配置 for wordpress & Discuz
首先Apache的Rewite规则差别不是很大,但是Nginx的Rewrite规则比Apache的简单灵活多了Nginx可以用if进行条件匹配,语法规则类似Cif ($http_user_agent ...
随机推荐
- mysql经典面试必须知道的
http://www.cnblogs.com/wangshouchang/p/6930443.html 在华三的时候就问道了数据集的事务的四种特性,事务的隔离级别,事务的存储过程等
- set dict tuple 内置方法
今日内容 * 元祖及内置方法* 字典及内置方法* 集合及内置方法* 字符编码 元祖tuple 与列表类似可以存多个值,但是不同的是元祖本身不能被修改 ```python一:基本使用:tuple 1 用 ...
- Celery浅谈
一.Celery 核心模块 1. Brokers brokers 中文意思为中间人,在这里就是指任务队列本身,接收生产者发来的消息即Task,将任务存入队列.任务的消费者是Worker,Brokers ...
- Docker编写镜像 发布个人网站
推荐国内镜像中心:网易云镜像----> https://c.163.com/hub#/home 或者歪果镜像---> https://hub.docker.com/ 博客地址:http: ...
- 关于Maven我应该知道的事
https://www.cnblogs.com/best/p/9676515.html bilibili 这里不是入门指南, 而是一些个人使用遇到的问题参考 一.环境 Maven 版本JDK要求 Ma ...
- 51单片机入门1--与C语言的交接
我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51) 在说编程之前,要先说一些别的东西: 二进制,八进制,十六进制 二进制中只有数字0和1,在二进制中1+1为10 ...
- 关于Dfs(1);
问: 我们大部分在根不定的情况下喜欢Dfs(1):到底要不要这样呢? 解释: 首先Dfs(1):是没有任何问题的,毕竟根不定,随便选一个肯定有1,这是没问题的,但是,很多数据也是这么造的,比如在1处卡 ...
- sql语句-根据动态参数去拼sql
1.查询 我们有的时候会有根据参数当条件去查找sql,但是参数有的需要有的不需要应该怎么办呢? 就比如这种的 这时候我们可以遍历传进来的参数 request.form会获取他所填写的参数 show = ...
- 阿里云上安装启动nginx 以及在个人电脑上通过公网ip访问遇到的问题
1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 ...
- SpringBoot日志功能
三.SpringBoot日志功能 1.日志框架 市面上的日志框架: JUL.JCL.Jboss-logging.Logback.Log4j.Log4j.SLF4J... 日志门面(日志的抽象层) 日志 ...