1.关于rewrite规则和重定向
- rewrite规则可以实现对url的重写,以及重定向
- nginx关于rewrite模块的官方文档:
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
- 在编译过程中pcre-devel库就是可以使用rewrite进行重写
重定向:就是地址A调转到地址B
就是通过各种方法将各种网络请求重新定个方向转到其他位置
如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向
重定向的原因:
网页调整(如改变网页目录结构)
网页被转移到一个新地址
网页扩展名改变(如应用需要把.php改为.html)
在这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中
旧地址只能访问客户得到一个404页面错误信息,访问流量白白丧失;
再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动调转到主站点等
- http返回码:
301 redirect
:301代表永久转移(Permanently Moved)302 redirect
:302代表暂时性转移(Temporarily Moved)- 301和302状态码都表示重定向
- 共同点:
- 就是说浏览器在拿到服务器返回的这个状态码后,
- 会自动调转到一个新的URL地址
- 这个地址可以从响应的Location首部中获取
- 用户看到的结果就是他输入的地址A瞬间变成了另一个地址B
- 不同点:
- 301:旧地址A的资源已经被永久的移除(这个资源不可访问了)
- 搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址
- 302:旧地址A的资源还在(仍然可以访问)
- 这个重定向只是临时的从旧地址A调转到地址B
- 搜索引擎会抓取新的内容而保存旧的网址
进行301或者302跳转的情况:
301:之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的
1>域名到期不想续费(或者发现了更适合网站的域名),想换个域名
2>在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,
此时可以用301重定向来告诉搜索引擎目标域名时哪一个
3>空间服务器不稳定,换空间的时候
302:当一个网站或者网页24/48小时内临时移动到一个新的位置时
-
尽量使用301跳转(原因)
-
从网站A(网站较烂)上做了一个302跳转到网站B(搜索排名很靠前)
-
此时搜索引擎可能会使用网站B的内容,但却收录了A的地址
-
从而使得网站A的排名靠前
-
而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,网站就会被封掉
-
罪名是“利用重复的内容来干扰Google搜索结果的网站排名”
rewrite重写规则: -
rewrite <regex> <replacement> [flag];
-
rewrite(关键字)
#不能改变 -
<regex>(正则)
#perl兼容正则表达式语句进行规则匹配 -
<replacement>(替代内容)
#将正则匹配的内容替换成 replacement -
[flag](flag标记)
#rewrite支持flag标记
flag标记说明:
last:本条规则匹配完成后,继续向下匹配新的locationURL规则
break:本条规则匹配完成即终止,不再匹配后面的任何规则
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址会显示跳转后的URL地址
- 示例:
rewrite ^(.*)$/pages/test.html break;
- 会把所有的请求都重定向到页面
/pages/test.html
- 正则表达式:
2.实现跳转方法
- 实现访问www.westos.org跳转到https://www.westos.org
cd /usr/local/nginx/conf
#切换到配置目录下vim nginx.conf
#编辑配置文件- 编写的server的内容为rewrite的规则,而不是location
rewrite ^/(.*)$ https://www.westos.org/$1;
#$1表示用户在这里输入的内容保留,只会重定向$1前面的- 只要输入www.westos.org域名,就会匹配所有,并跳转到https://www.westos.org
rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
#永久重定向(可以缓存,若为临时的则不允许缓存)nginx-t
#检查配置文件是否出错nginx
#启动服务
- 在浏览器中输入:
www.westos.org
会跳转到https://www.westos.org
- 在浏览器中输入
www.westos.org/test/html
会跳转到https://www,westos.org/test/html
- 但由于只重定向$1之前的,因此访问不到
3.两个域名之间的跳转
vim nginx.conf
#编辑配置文件rewrite ^/qaz$ https://qaz.westos.org/index.html permanent;
#表示访问www.westos.org并且以qaz结尾的,都重定向到https://qaz.westos.org- 编辑内容为:
- 在访问的真机上添加解析
- 访问
https://qaz.westos.org
,可以访问到
- 访问
www.westos.org/qaz
会跳转到https://qaz.westos.org/index.html
- 若访问
www.westos.org
则访问的是源有配置的默认发布文件 - 只有访问特定格式的域名才会实现跳转
- 如果更改配置,访问
www.westos.org
时跳转结果如下: - 配置更改如下: