1.Rewrite基本概述
rewrite主要实现url地址重写, 以及重定向.
Rewrite使用场景
1.URL访问跳转: 支持开发设计, 页面跳转, 兼容性支持, 展示效果
2.SEO优化: 依赖于url路径,以便支持搜索引擎录入
3.维护: 后台维护, 流量转发等
4.安全: 伪静态,真实动态页面进行伪装
2.Rewrite配置语法
Syntax: rewrite regex replacement [flag];
Default: --
Context: server, location, if
//所有请求转发至/pages/maintain.html
rewrite ^(.*)$ /pages/maintain.html break;
正则表达式
正则表达式中特殊字符
\ 转义字符
rewrite index\.php$ /pages/maintain.html break;
() 用于匹配括号之间的内容, 通过$1,$2调用
if ($http_user_agent ~ Chrome){
rewrite ^(.*)$ /chrome/$1 break;
}
正则表达式终端测试工具
[root@Nginx ~]# yum install -y pcre-tools
[root@Nginx ~]# pcretest
PCRE version 8.32 2012-11-30
re> /(\d+)\.(\d+)\.(\d+)\.(\d+)/
data> 192.168.56.11
0: 192.168.56.11
1: 192
2: 168
3: 56
4: 11
3.Rewrite标记Flag
对比flag中break与last
[root@Nginx ~]# cat /etc/nginx/conf.d/rewrite.conf
server {
listen 80;
server_name localhost;
root /soft/code;
location ~ ^/break{
rewrite ^/break /test/ break;
}
location ~ ^/last{
rewrite ^/last /test/ last;
}
location /test/{
default_type application/json;
return 200 '{"status":"success"}';
}
}
测试break
测试last
last与break对比总结:
last会新建立一个请求, 请求域名+/test
break匹配后不会进行匹配, 会查找对应root站点目录下包含/test目录
对比flag中redirect与permanent
[root@Nginx ~]# cat /etc/nginx/conf.d/rewrite.conf
server {
listen 80;
server_name localhost;
root /soft/code;
location ~ ^/bgx {
rewrite ^/bgx http://kt.xuliangwei.com redirect;
rewrite ^/bgx http://kt.xuliangwei.com permanent;
}
测试Nginx中redirect
nginx -s stop停止Nginx服务
测试Nginx中permanent
nginx -s stop停止Nginx服务
4.Rewrite使用场景
第一种场景
ls /soft/code/course/11/22/course_33.html
location / {
rewrite ^/course-(\d+)-(\d+)-(\d+)\.html /course/$1/$2/course_$3.html break;
}
第二种场景
if ($http_user_agent ~* Chrome){
rewrite ^/nginx http://kt.xuliangwei.com/index.html redirect;
}
5.Rewrite额外补充
Rewrite匹配优先级
1.执行server块的rewrite指令
2.执行location匹配
3.执行选定的location中的rewrite
Rewrite优雅书写
server {
listen 80;
server_name www.bgx.com bgx.com;
if ($http_host = nginx.org){
rewrite (.*) http://www.bgx.com$1;
}
}
//改良版
server {
listen 80;
server_name bgx.com;
rewrite ^ http://www.bgx.com$request_uri?;
}
server {
listen 80;
server_name www.bgx.com;
}
第三种场景
location ~* ^/api/.*$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://openapi.mcake.com;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
文档更新时间: 2019-07-09 12:51 作者:李延召