nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.

摘要:
}位置~*^/封面/d*。html${rewrite^/cover/.*$/pages/detail.htmlbreak;#root/home/ht/nginxpages;#indexpages/detail.html;}简单地说;更改到其他路径以尝试查找文件;看起来nginx为容错提供了这个功能&lt!元字符集=“UTF-8”>

最近在做一个前后端分离的个人博客,在做自己博客的时候有个想法,本来是打算用nginx作为静态文件服务器使用,django做后端程序.

我的前端页面用vue写的,结果用组件用嗨了,发现页面列表和 详情都是通过切换组件实现的,这样很省代码,但是为了实现下面这种效果的时候遇到了问题:

我要访问url: http://www.liushx.com/artical/123456.html

返回同一页面(artical.html 或者 detail.html , 具体内容通过api获取, 123456.html就是携带请求数据的),但是要带上123456.html,这个数据是文章详情的id,必须提供.

那么问题来了,如何实现nginx在处理这个路径的时候去提供我的那个通用文件呢?

简单说明我的文件结构:

ht@ht-PC:~$ pwd
/home/ht
ht@ht-PC:~$ tree nginx-pages
nginx-pages
├── index.html
└── pages
    ├── artical.html
    └── detail.html

1 directory, 3 files

按照现在网上的所有可以找到的方法,我需要把我的url路径设定为 /pages/artical.html

但是这显然不符合我的需求,我希望的路径是:  /art/123456.html  响应 /pages/artical.html ;   /novel/123456.html  响应 /pages/detail.html ;

虽然找不到这种类型的资料,但是我相信nginx 是很牛逼的,他们的大佬工程师必定提供这种简单的需求了.

这种需求在后端实现起来很简单,我感觉通过nginx实现的话,思路八成就是跳转,可惜的是通过 proxy_pass 的方式行不通, nginx会把文件名拼起来,结果就是跳转之后,nginx会去寻找一个 /pages/artical.html123456.html 的神奇文件,然后骄傲的向我报错.

然后我去查看下官方文档,发现一个有意思的函数 rewrite, re开头的函数....嗯........差不多就是她了!

官方文档上对rewrite的说明:

rewrite regex replacement flag

理解了意思之后立马去尝试, O 了个大 K,跑通了!!!!!

下面提供关键代码:

nginx.conf

    server_name localhost;
    root /home/ht/nginx-pages;
    location / {
        index index.html;
        }

    location ~* ^/art/d*.html$ {
        rewrite ^(/art/.*)$ /pages/artical.html break; 
        # root /home/ht/nginx-pages;
        # index pages/artical.html;
    }
    location ~* ^/novel/d*.html$ {
        rewrite ^/novel/.*$ /pages/detail.html break;
        # root /home/ht/nginx-pages;
        # index pages/detail.html;
    }

简单来讲,就是把拿到的路径重新写,换成另一个路径去尝试查找文件,好像nginx提供这个函数是为了容错的,殊途同归嘛,我拿来满足我的需求也好啊.

这个函数提供的效果简直堪称优秀 !

因为nginx只是内部改写了这个路径,返回给浏览器的还是用户请求的路径 !

我的html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>index</h1>
</body>
</html>

artical.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>artical</title>
</head>
<body>
<h1>artical</h1>
</body>
</html>

detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>detail</title>
</head>
<body>
<h1>detail</h1>
</body>
</html>

运行成功后浏览器的效果:

nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.第1张nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.第2张nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.第3张

嗯嗯,圆满了...

免责声明:文章转载自《nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【微信】新闻推送步骤Error:(5, 45) java: 程序包org.springframework.boot.test.context不存在 解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c语言入门-01

当我们学c语言我们学些什么. [1]编译机制 当我们写好c的代码,生产了程序,这中间到底做了些什么?    这个就是c语言的编译过程 我们分别来解析这上面的过程。 我们写出我们第一个c程序。   1 #include<stdio.h> 2 3 int main(){ 4 // print hello world...

各种WAF收集集锦

开源WAF集锦收集 https://blog.51cto.com/14678079/2474927 1.免费版本sharewaf http://www.sharewaf.com/ 2.hihttps hihttps是一款少有完整源码的高性能WEB应用 + MQTT物联网防火墙,兼容ModSecurity规则并开源。特点是使用超级简单,就一个约10M的可执行...

Linux-026-Centos Nginx 配置 pid 文件路径解决 service nginx status 提示:Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory

在使用 service nginx status 命令查看 nginx 的运行状态时,提示:Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory 导致 nginx 服务关闭,服务不可用,具体提示信息如下所示 查看 nginx.conf 配置...

二分图及其相关知识总结

二分图及其相关知识总结 pre: 二分图:图G划分为两个点集A,B且在同一点集内的所有点互不相交的图. 匹配:在二分子图的边集M中如果M中的每条边的两个端点只有该条边与这两个端点相连,则M称为一个匹配。 匹配边:两个相匹配的点之间的连线。 最大匹配:图中包含边数最多的匹配。 完备匹配:如果有一边的点全都是匹配点,则称这个匹配为完备匹配。 完美匹配...

xcode svn

xcode svn   转帖:http://linyatong.blog.163.com/blog/static/237072054201451822525446/    在XCode中使用SVN   Xcode 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径,而SVN是版本控制工具,那么Xcode...

苹果开发之App签名

如果你的Apple ID账号(可使用邮箱来注册)为Apple developer类型的话,登录之后是看不到Certificates, Indentifiers & Profiles信息的 Apple developer是最基础的账号类型,主要用来在App Store下载各种应用(包括xCode等开发工具和SDK库)及在iCloud上备份文件和照片...