网页网站您现在的位置是:首页 > 博客日志 > 网页网站

nginx跳转案例详解

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-09-16网页网站 2 0关键字: nginx  

一、跳转状态nginx的跳转状态有两种,301重定向是永久的重定向,搜索引擎会抓取新的内容的同时将旧的地址替换为重定向后的网址;302重定向是暂时的重定向,搜索引擎会抓取新的内容

一、跳转状态

nginx的跳转状态有两种,301重定向是永久的重定向,搜索引擎会抓取新的内容的同时将旧的地址替换为重定向后的网址;302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址。因为服务器返回302,所以搜索引擎会认为新的网址是暂时的。Djl无知

二、跳转状态的写法

return指令在301跳转上比rewrite指令性能上更加有优势。虽然在访问量不大的情况下几种写法的性能表现上区别并不大,不过在海量访问中一个小小的优化也能在提升业务系统性能上起到不小的作用Djl无知

301跳转的两种写法:Djl无知

rewrite ^(.*) https://www.test.com$1 permanent;
rewrite ^(.*)$ $host$1 permanent;
rewrite ^ https://www.test.com$request_uri? permanent;

return 301 $scheme://www.test.com$request_uri;
return 301 https://www.test.com$request_uri;

302跳转的两种写法:Djl无知

rewrite ^(.*) https://www.test.com$1 redirect;
rewrite ^(.*)$ $host$1 redirect;
rewrite ^ https://www.test.com$request_uri? redirect;

return 302 $scheme://www.test.com$request_uri;
return 302 https://www.test.com$request_uri;

三、匹配规则

正则表达式匹配,其中:Djl无知

  • ~ 为区分大小写匹配Djl无知

  • ~* 为不区分大小写匹配Djl无知

  • !和!*分别为区分大小写不匹配及不区分大小写不匹配Djl无知

文件及目录匹配,其中:Djl无知

  • -f和!-f用来判断是否存在文件Djl无知

  • -d和!-d用来判断是否存在目录Djl无知

  • -e和!-e用来判断是否存在文件或目录Djl无知

  • -x和!-x用来判断文件是否可执行Djl无知

flag标记有:Djl无知

  • last 相当于Apache里的[L]标记,表示完成rewriteDjl无知

  • break 终止匹配, 不再匹配后面的规则Djl无知

  • redirect 返回302临时重定向 地址栏会显示跳转后的地址Djl无知

  • permanent 返回301永久重定向 地址栏会显示跳转后的地址Djl无知

四、跳转实例

1、访问www.a.com域名全部跳转到www.b.com

server_name      www.a.com;
rewrite  ^/(.*)$   $scheme://www.b.com/$1 permanent;

2、主域名跳转www

server_name      a.com www.a.com;
return 301 $scheme://www.a.com$request_uri;

3、主目录跳转,子目录不跳转,a.com和www.a.com都跳到www.b.com,而www.a.com/123不跳

server {
    listen               80;
    server_name  a.com www.a.com;
    #根目录跳转
    location / {
            rewrite .+ http://www.b.com/ permanent;
    }
    #非根目录本地执行
    location ~* /.+ {
    #已省略余下通用配置内容
    }
}

4、如果页面或目录不存在将直接跳转至网站首页

location / {
	root    /usr/share/nginx/html/;
    index  index.html index.htm;
	if (!-e $request_filename) {
    return 301 $scheme://$host;
    break;
   }
}

5、所有页面跳转指定页面

(1)对于静态页面Djl无知

if ($request_uri !~* "^/test/$") {
   rewrite ^(.*) https://www.a.com/repair/ permanent;
}

(2)对于非静态页面(含有css和图片等非链接地址)Djl无知

set $flag 0;
if ($request_uri !~* ".(jpg|jpeg|png|gif|ico|css|js|gz)$") {
	set $flag "${flag}1";
}
if ($request_uri !~* "repair") {
	set $flag "${flag}2";
}
if ($flag = "012") {
	rewrite ^/(.*) /test/index.html permanent;
}

6、www.a.com/test/123.html 跳转为 test/?cd=123

rewrite "/test/(.*).html$" /test/?cd=$1 last;

7、www.a.com/test/ 下跳转为www.a.com/test/index.php?s=

if (!-e $request_filename){
rewrite ^/admin/(.*)$ /admin/index.php?s=/$1 last;
}

8、在后面添加/index.php?s=

if (!-e $request_filename){
  rewrite ^/(.*)$ /index.php?s=/$1 last;
}

9、www.a.com/test/123.html 等test下面数字+html的链接跳转为404

rewrite ^/test/([0-9]+).html$ /404.html last;

五、实例配置

1、文件服务器配置

location / {
          root /data/software/;
          index _;
          autoindex on; # 开启目录文件列表
          autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
          autoindex_localtime on; # 显示的文件时间为文件的服务器时间
          charset utf-8,gbk; # 避免中文乱码
     }

转自:http://t.zoukankan.com/wzxmt-p-12524116.html Djl无知


Djl无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2022-09-16/1381.html

很赞哦! () 有话说 ()