最近在做一个前后端分离的个人博客,在做自己博客的时候有个想法,本来是打算用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 directory, 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配置静态文件服务器

    搭建文件服务器 要点就是root目录,会自动指向索引文件 如: index, index.html等 server { client_max_body_size 4G; listen 80; ## l ...

  2. CentOS 6(64-bit) + Nginx搭建静态文件服务器

    Nginx搭建静态文件服务器 使用命令打开Nginx配置文件: sudo vim /etc/nginx/conf.d/default.conf 将配置改为: server { ...... ..... ...

  3. Ubuntu 14.04TLS Nginx搭建静态文件服务器

    Nginx搭建静态文件服务器 [官方教程]https://www.nginx.com/resources/admin-guide/serving-static-content/ 打开Nginx的配置文 ...

  4. nginx配置静态资源与动态访问分离【转】

    在前面的博客中<说说 NGINX 的配置及优化>的 2.5 小节里面,提到 location 模块是 nginx 中用的最多的,也是最重要的模块,负载均衡.反向代理.虚拟域名等都与它相关. ...

  5. nginx配置静态资源:配置绝对路径

    nginx配置静态资源:配置绝对路径 项目都是html格式的文件,我的项目路径:E:\javaservice\nginx-1.15.7\html assets:静态资源 html:站点文件 uploa ...

  6. Nginx配置静态资源

    静态服务器 静态服务器概念非常简单:当用户请求静态资源时,把文件内容回复给用户. 但是,要把静态服务做到极致,需要考虑的方面非常多: 正确书写header:设置content-type.过期时间等 效 ...

  7. nginx配置静态webserver

    配置静态的web,须要实现一个虚拟主机. step1: 准备工作             1  查看你的网卡地址(我的 192.168.223.135)                  #ifcon ...

  8. nginx配置静态资源访问

    本篇配置使用场景:本地通过浏览器访问linux上某个文件夹下的文件: 1.安装jdk及nginx步骤省略 2.进入正题 (1) 查看nginx安装路径:[root@localhost conf]# w ...

  9. nginx 配置静态资源路径(url不同于static path)

    目的         用nginx做静态资源代理可以减少请求对后台服务器的压力,使响应更加迅速. 配置        情景一           url : 127.0.0.1:8000/images ...

随机推荐

  1. 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?

      本篇主要内容:异步.定时器引发的思考 预计阅读时间:8分钟 了解 我们都知道在js中定时器有两种  setInterval()  . setTimeout()   setInterval() :按 ...

  2. POJ2485 Highways 【MST】

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22842   Accepted: 10525 Descri ...

  3. 用Hexo搭建个人博客

    博客地址: http://astraylinux.com/ 文章地址: http://astraylinux.com/2015/06/02/linux-Init-Hexo/ Step 1 Instal ...

  4. JAVA并发-内置锁和ThreadLocal

    上一篇博客讲过,当多个线程访问共享的可变变量的时候,可以使用锁来进行线程同步.那么如果线程安全性存在的3个前提条件不同时存在的话,自然就不需要考虑线程安全性了.或者说如果我们能够将某个共享变量变为局部 ...

  5. Understanding IIS Bindings, Websites, Virtual Directories, and lastly Application Pools

    In a recent meeting, some folks on my team needed some guidance on load testing the Web application ...

  6. 智课雅思词汇---四、clos和cap和ced是什么意思

    智课雅思词汇---四.clos和cap和ced是什么意思 一.总结 一句话总结: cap/capt/cip/cep/ceiv:to take,seize(拿,抓住) cede:to go,yield( ...

  7. Linux系统安全加固(一)

    Linux系统安全加固(一)     去年8月,某所网站遭黑客攻击瘫痪虽然港交所随后及时启用备用系统,但还是致使7支股票1支债卷被迫停牌,次日再次遭受攻击而瘫痪:在去年年底继CSDN信息安全出现之后, ...

  8. update-alternatives 命令

    update-alternatives 命令 1.功能作用 update-alternatives是dpkg的实用工具,用来维护系统命令的符号链接,以决定系统默认使用什么命令. 在Debian系统中, ...

  9. installp 软件的4种状态

    安装和维护LPP软件     installp 对包提供了如下四种主要的操作: Apply Commit Reject Remove   webes.4.0.0.1 commited webes.4. ...

  10. Fedora27 安装Adobe Flash Player PPAPI与NPAPI实现Firefox和Chromium视频播放

    一.Adobe Flash Player PPAPI与NPAPI有什么区别我们在打开网页视频时有时会弹出没有安装Flash插件的提示,此时就无法观看视频.Adobe Flash Player是浏览器显 ...