本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。
结合本文场景,需要安装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来实现这个功能。
本文介绍Nginx实现URL重写。
在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---传送门。
原文:https://www.cnblogs.com/dalaoyang/p/10264919.html