本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。html
结合本文场景,须要安装Nginx。nginx
1.1 关于Linux系统安装Nginx能够参考个人文章---(传送门)。正则表达式
URL重写是指将一个URL请求从新写成网站能够处理的另外一个URL的过程。这样说可能不是很好理解,举个例子来讲明一下,在开发中可能常常遇到这样的需求,好比经过浏览器请求的http://localhost:8080/getUser?id=1,可是须要经过SEO优化等等缘由,须要把请求的地址重写为http://localhost:8080/getUser/1这样的URL,从而符合需求或者更好的被网站阅读。浏览器
当遇到这种请求的时候,就须要使用到UrlRewrite重写或者使用一些网关路由,如SpringCloud的Gateway,Zuul,又或者是Nginx来实现这个功能。bash
本文介绍Nginx实现URL重写。cookie
在Nginx中使用URL重写须要使用到一个指令-----rewrite,其语法以下:学习
rewrite regex replacement [flag];
复制代码
flag值为以下四种,分别是:测试
例如:优化
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
复制代码
另外还能够根据if来判断,指令以下:网站
if (condition) { ... }
复制代码
其中condition是条件,若是为true,则执行大括号中的内容:
例如:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
复制代码
本文例子只是将请求跳转到本人的博客首页http://www.dalaoyang.cn/,配置以下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 10000;
server_name localhost;
#若是host不是dalaoyang.cn,则301到www.dalaoyang.cn中
if ( $host != "dalaoyang.cn" ){
rewrite ^/(.*)$ https://www.dalaoyang.cn/$1 last;
}
}
}
复制代码
测试就比较简单了,在浏览器访问http://localhost:10000/about,会自动跳转到https://www.dalaoyang.cn/about,如图所示。
大部份内容都是参考自Nginx官网来学习的,官网的例子都很详细。
参考自Nginx官网ngx_http_rewrite_module模块官方API---传送门。