nginx:将所有请求发送到单个 html 页面

IT技术 javascript nginx history
2021-02-27 11:30:16

使用nginx,我想保留url,但无论如何实际加载相同的页面。我将使用 urlHistory.getState()来路由我的 javascript 应用程序中的请求。看起来应该是一件很简单的事情吧?

location / {
    rewrite (.*) base.html break;
}

工作,但重定向网址?我仍然需要网址,我只想始终使用相同的页面。

6个回答

我认为这将为您做到:

location / {
    try_files /base.html =404;
}
使用try_files '' /base.html;(空字符串作为 的第一个参数try_files)可避免查找名为 的文件$uri
2021-04-26 11:30:16
注意——这将首先检查请求的文件,如果它不存在,它将提供 base.html。因此,请确保您的文档根目录中没有旧的额外文件,否则如果查询它们将直接获得服务。
2021-04-27 11:30:16
好的,试试这个: try_files $uri /base.html;
2021-04-29 11:30:16
try_files '' /base.html;给了我一个重定向问题和一个内部服务器错误,但try_files '' /base.html =404;如果它对任何人有帮助,请修改它以修复它。
2021-05-08 11:30:16
[紧急] 613#0:“try_files”指令中的参数数量无效?
2021-05-10 11:30:16

使用只是try_files对我不起作用 - 它导致我的日志中出现重写或内部重定向循环错误。

Nginx 文档有一些额外的细节:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

所以我最终使用了以下内容:

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}
这对我有用,但我实际上并不需要这个location = /base.html { expires 30s }部分。
2021-04-23 11:30:16
try_files '' /base.html =404; (往上看)
2021-05-16 11:30:16

你原来的重写应该几乎可以工作。我不确定为什么会重定向,但我认为您真正想要的只是

rewrite ^ /base.html break;

您应该能够将其放在某个位置或直接放在服务器中。

对我来说最好的答案。其他人不适合我
2021-05-06 11:30:16

这对我有用:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

这允许我为 javascript 单页应用程序创建一个包罗万象的 URL。所有静态文件,如 css、字体和 javascript 构建的,npm run build 如果它们与index.html.

如果静态文件在另一个目录中,出于某种原因,您还需要以下内容:

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}
tks,这对我有用,但尾部斜线alias很重要
2021-04-29 11:30:16

这对我有用:

location / {
    try_files $uri $uri/ /base.html;
}
对于一个作出反应的应用程序的生产版本,这个作品:try_files $uri $uri/ /index.html =404;为什么?因为构建包含更多其他文件,包括静态 JavaScript 和 CSS 文件。
2021-05-03 11:30:16