nginx配置单页应用

Posted by Hongjie Blog on September 30, 2018

try_files指令 语法:try_files file … uri 或 try_files file … = code 默认值:无 作用域:server location

其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

这就很明确了,我们的这种写法try_files $uri $uri/ /index.html;就会导致所有找不到的url都会跳转到index.html文件。

那么这个问题怎么处理呢? 我们需要兼顾单页应用中url的配置,又需要兼顾到我们404页面的展示。 思前想后,我觉得还是if语法会比较合适。

    location / {
        if ($uri = /routerName) {
            rewrite .* /index.html break;
        }
        root   /sunday/website/dist/;
        index  index.html index.htm;
    }

附上nginx的匹配规则

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~* 开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。