rewrite的一般多用于实现RUL地址的重定向。
Nginx的rewrite通过perl兼容正则表达式语句进行规则匹配的。
默认配置下,Nginx会支持rewrite的模块。
通过下方案例便能轻松理解rewrite的作用。
# 原本访问文章的URL
http://www.mebugs.com/post.php?url=java
# URL太不美观、暴露了我的后端请求地址、暴露了请求参数
# 通过rewrite可以实现如下地址访问,等同于上方地址
http://www.mebugs.com/post_java.html
# 配置规则
# 访问post_开头.html结果地址,重写到post.php?url=中间匹配的字符
rewrite ^/post_(.*).html$ /post.php?url=$1 break;
理解作用后,我们可以看下rewrite的语法。
rewrite的语法很简单,分为四部分。
#关键字 正则 替代内容 标记
rewrite <regex> <replacement> [flag];
关于正则的规则不需要多说,这一段内容主要用于匹配访问的URL。
rewrite中常见的正则规则:
*
:匹配前面的字符零次或多次,如x*能匹配x、xx、xxx,.*则表示通配rewrite中的正则还受其所在的location影响,因为外部location也是可以正则的。
注意:rewrite可以不配置在location下表示全局生效
# 基本规则(所有的URL都会接受rewrite)
location / {
rewrite ^/post_(.*).html$ /post.php?url=$1 break;
}
# location有规则(只有URL以.html结尾的请求才会进来)
location ~ .*.(html)?$ {
rewrite ^/post_(.*).html$ /post.php?url=$1 break;
}
# 这是一个错误的规则(不会生效)
# 外部定义了只有/open开始的URL进来,内部定义了匹配/post,所以规则不会生效
location /open {
rewrite ^/post_(.*).html$ /post.php?url=$1 break;
}
替代内容实际上就是将前面匹配到的URL转换成实际URL。
需要注意的是,
# 还是上文的例子
# $1取得是前面规则中(.*)匹配的字符串,比如:/post_java.html时$1就是java
rewrite ^/post_(.*).html$ /post.php?url=$1 break;
# 多参数的写法
# /page_new_1_.html => /page.php?type=new¤t=1
rewrite ^/page_([a-z]+)_(d+)_.html$ /page.php?type=$1¤t=$2 break;
这是一个可选项,不写默认似乎是last。
我们看到redirect和permanent会发生重定向。
而last和break用来实现URL重写,浏览器地址栏URL地址不变。
正则
rewrite ^/c_[0-9]+/(.*)$ /comm/$1 break;
# 上方规则仅仅对第二部分进行传参匹配
# 比如:/c_1/go =>/comm/go /c_1/xx/mo =>/comm/xx/mo
rewrite不一定需要完全在配置文件中配置,可以单独引入。
# REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/rewrite/mebugs.conf;
# REWRITE-END
# 配置文件不一定要.conf,.htaccess 也是可以的
配置rewrite规则时可以引入一些Nginx的全局变量,甚至增加if条件判断,可以实现更为复杂的规则配置。
# 如果访问的是mebugs.com的任意子域名才生效如下规则
if ($host ~* (.*)/.mebugs/.com) {
rewrite ^/page_([a-z]+)_(d+)_.html$ /page.php?type=$1¤t=$2 last;
}
# 特定子域名访问子目录
if ($http_host ~ me/.mebugs/.com$) {
rewrite ^(.*) /me/$1 break;
}
正常情况下将手工操作的行为转换为DOS命令,然后放入到.bat文件中就完成了一键脚本的制作,本文中的一键备份&清理脚本仅作为抛砖引玉的作用,主要目的用于学习下bat脚本的基本关键字
pagefile.sys文件一般存在于c盘,只有点击系统的隐藏属性才能看到它,这个文件的容量一般都比较大,而且大小不是固定的,不可以直接删除,会出现内存不足错误需要进行特定配置
CentOS7.9在启动Docker之后会出现卡死,ssh远程连接(XShell)自动断开且无法再次连接,仅重启后方能连接,但启动Docker之后依旧出现前面的相同情况的问题解决方案