前段时间使用vitepress出现过一个问题: 部署的时候需要去掉后缀.html
,已经在vitepress配置文件中设置了,但当部署到nginx上时,如果是中文路径,刷新页面会导致404,nginx经过try_file调教后解决问题。
原因比较简单:
- 部署之后html资源文件是
.html
结尾的 - 如果当前页面不是单页面跳转的,直接访问无html得路径时,无法映射到对应的文件
nginx配置修改如下:
location / {
# vitepress 配置的访问的没有.html,这里参考了 https://www.cnblogs.com/taozhengquan/p/15262636.html
try_files $uri $uri/ $uri.html /index.html?$args;
}
location / {
# vitepress 配置的访问的没有.html,这里参考了 https://www.cnblogs.com/taozhengquan/p/15262636.html
try_files $uri $uri/ $uri.html /index.html?$args;
}
关于try_file的说明:
Module ngx_http_core_module
Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the_file_
parameter according to the root and alias directives. It is possible to check directory’s existence by specifying a slash at the end of a name, e.g. “$uri/
”. If none of the files were found, an internal redirect to the_uri_
specified in the last parameter is made.
按顺序检查文件是否存在,如果不存在就重定向最后一个参数
例如
location /images/ {
root /pics/;
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
location /images/ {
root /pics/;
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
当请求 127.0.0.1/images/xxx.png 会依次查找
- 1.文件/pics/xxx.png
- 找不到会请求127.0.0.1/images/default.gif
try_files 的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误。命名的 location 也可以使用在最后一个参数中。与 rewrite 指令不同,如果回退 URI 不是命名的 location 那么 $args 不会自动保留,如果你想保留 $args,则必须明确声明。