一、什么是Rewrite
-
URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如
http://www.123.com/news/index.php?id=123 使用URLRewrite 转换后可以显示为 http://www.123
.com/news/123.html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。
理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所
以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。 -
从安全角度上讲,如果在URL中暴露太多的参数,无疑会造成一定量的信息泄漏,可能会被一些黑客
利用,对你的系统造成一定的破坏,所以静态化的URL地址可以给我们带来更高的安全性。 -
实现网站地址跳转,例如用户访问360buy.com,将其跳转到jd.com。
二、Rewrite相关指令
重定向
将用户的访问(url),更换成指定的文件。
if 语句 应用环境:server,location
语法:if (condition) { … }
条件判断
~* 正则匹配 (不区分大小写)
!~ 非正则匹配 (区分大小写)
!~* 非正则 匹配 (不区分大小写)
-f 和!-f 用来判断是否存在文件
-d 和!-d 用来判断是否存在目录
-e 和!-e 用来判断是否存在文件或目录
-x 和!-x 用来判断文件是否可执行
全局变量
$document_root
针对当前请求的根路径设置值;
$remote_addr
客户端地址;
$request_filename
当前请求的文件路径名(带网站的主目录/usr/local/nginx/html/images/a.jpg)
$request_uri
当前请求的文件路径名(不带网站的主目录/images/a.jpg)
$scheme
用的协议,比如http或者是https
$server_name
请求到达的服务器名;
$args
请求中的参数;
$host
请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate
对连接速率的限制;
$request_method
请求的方法,比如"GET"、"POST"等;
$remote_port
客户端端口号;
$remote_user
客户端用户名,认证用;
q
u
e
r
y
s
t
r
i
n
g
与
query_string 与
querystring与args相同;
$server_protocol
请求的协议版本,“HTTP/1.0"或"HTTP/1.1”;
$server_addr
服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
d
o
c
u
m
e
n
t
u
r
i
与
document_uri 与
documenturi与uri一样,URI地址;
$server_port
请求到达的服务器端口号;
实战演示:
1、跳转页面
当我们使用permanent会出现什么情况呢?
2、替换部分路径
mkdir /usr/share/nginx/html/2017/a/b/c/ -p 创建目录
vim /usr/share/nginx/html/2017/a/b/c/1.html 写入内容
写配置文件
用判断的办法替换新页面
写配置文件
本地解析
我们写了permanent,所以看不到路径,就看一下状态码,查询状态码,可以知道我们访问的qianfneg.com别推送给了http://jd.com
状态码:301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
新的永久性的URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。
如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。
3、
if (-d KaTeX parse error: Expected '}', got 'EOF' at end of input: … ^(.*)([^/]) http://$host$1$2/ permanent;
}
这次的实验就不在演示了, 因为我在反复验证之后,就算我们不在配置文件中写上面的命令,浏览器自身也会自己加上。
4、http://www.tianyun.com/login/tianyun.html
转为
http://www.tianyun.com/reg/login.php?user=tianyun
location /login {
rewrite ^/login/(.*).html$ /reg/login.php?user=$1;
}
5、目录的表达方式发生变化。
原先的“-”分割,变成了“/"目录层次。
6、引用原URL当中的信息,重定向至目标的URL
#http://alice.qianfeng.com ==> http://www.qianfeng.com/alice
#http://jack.qianfeng.com ==> http://www.qianfeng.com/jack
7、当看.sh文件时。return返回403
当不写时:
不写时,下载下来还是能看。
8、验证last的特性
准备三个页面
写配置文件
内容不一样,显示的是test的内容