在浏览器输入www.jingdong.com可以帮你跳转到https://www.jd.com/,而且在输入一些路径的时候比如https://www.jd.com/cwwecvwev这种,正常情况会报404资源找不到,但是它帮你重定向到了首页。
在手机端打开京东是手机端的页面https://m.jd.com/,在pc端打开的是https://www.jd.com/页面,在不同的终端打开的页面的地址是不一样的。
Nginx的rewrite功能需要pcre软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要pcre的支持。
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。
rewrite语法
rewrite <regex> <replacement> [flag]
正则 替代内容 flag标记
正则:perl兼容正则表达式语句进行规则匹配
1 2 3 4 5 6 7 8 9 10 11 |
. :匹配除换行符以外的任意字符 ? :重复0次或1次 + :重复1次或更多次 * :重复0次或更多次 \d :匹配数字 ^ :匹配字符串的开始字符 $ :匹配字符串的结束字符 {n} :重复n次 {n,} :重复n次或更多次 [c] :匹配单个字符c [a-z] :匹配a-z小写字母的任意一个 |
在rewrite中,如果使用小括号(),那么在小括号之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last #本条规则匹配完成终止当前location的规则,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
rewrite实现域名跳转
当访问test.com时候,跳转到www.test.com,域名之间的跳跃,即从一个server虚拟主机跳到另外一个server虚拟主机
server {
listen 80;
server_name test.com;
rewrite ^/(.*)$ http://www.test.com/$1;
}
server{
listen 80;
charset utf-8;
server_name www.test.com;
location /{
root /data/www;
index index.html;
}
}
[root@www ~]# echo "rewrite sucess this is www.test.com" > /data/www/index.html
修改C:\windows\system32\drivers\etc/hosts文件添加如下,在本地做解析
192.168.179.99 www.test.com test.com