nginx rewrite规则详解(nginx rewrite_by_lua)
目录
- 概述
- rewrite语法规则
- rewrite配置实例解析
- php7进阶到架构师相关阅读
概述
这是关于php进阶到架构之Nginx进阶学习的第二篇文章:nginx rewrite规则详解
- 第一篇:5分钟搞懂nginx的location匹配规则
- 第二篇:nginx rewrite规则详解
nginx的rewrite功能和apache一样,rewrite的主要功能是实现RUL地址的重定向。
Nginx的rewrite模块即ngx_http_rewrite_module模块。
rewrite机制从某种意义上可以说为了美观或者搜索引起的友好搜索,提高排名等
rewrite语法规则
语法:
rewrite regex replacement [flag]
rewrite:rewrite重写的关键字不可省略
regex:这里写的是正则表达式
replacement:这里是替换内容
flag:这里是flag标记
flag标记说明:
相关符号说明:
文件目录匹配:
rewrite配置实例解析
实例1 :多域名跳转到同一域名
server{
listen 80;
server_name www.toutiao.com toutiao.com ;
if($host != 'www.jkyst.xyz' ){
rewrite ^/(.*)$ http://www.toutiao.com/$1 permanent;
}
location ~.*\.(png|gif|jpg){
return 403;
}
}
该重写实例含义:
1.浏览器在地址栏访问toutiao.com相当于http://www.toutiao.com/,
2.permanent参数:表示浏览器地址栏地址由toutiao.com转为http://www.toutiao.com/
实例2 :当文件不存在时重定向到指定文件-permanent
server{
listen 80;
server_name www.gofor.com;
if(!-e $request_filename){
rewrite ^/test/(.*)$ http://www.gofor.com/test1/$1 permanent;
}
}
当访问 "test" 目录下的文件或目录不存在时,
则跳转到 "test1"下面的此文件或者目录,
跳转后会将URL进行转换(浏览器地址栏地址变更)
实例3 :当文件不存在时重定向到指定文件-last
server{
listen 80;
server_name www.gofor.com;
if(!-e $request_filename){
rewrite ^/test/(.*)$ index.html last;
}
}
表示当访问 "test" 目录下的文件或目录不存在时,则重定向到 "index.html"文件,
跳转后URl不会进行转换(浏览器地址栏地址不变)
实例4 :当文件不存在时重定向到指定文件
server{
listen 80;
server_name www.gofor.com;
if(!-e $request_filename){
rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.gofor.com/test/$1$2$3 permanent;
}
}
目录切换,表示将原目录转换成其他目录,【0-9a-z】表示转换后目录名称
实例5 匹配用户浏览器代理信息
server{
listen 80;
server_name www.gofor.com;
if ( $http_user_agent ~* ("Android")|(iPhone)){
rewrite ^/test/(.*)$ http://www.gofor.com/test/$1 permanent;
}
}
表示当匹配到浏览代理为Android和iPhone时进行重定向 "test"目录下的文件,改变访问的地址
php7进阶到架构师相关阅读
https://www.kancloud.cn/gofor/gofor