【问题标题】:nginx: send all requests to a single html pagenginx:将所有请求发送到单个 html 页面
【发布时间】:2011-10-25 01:15:51
【问题描述】:

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

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

有效,但重定向网址?我仍然需要网址,我只想始终使用同一个页面。

【问题讨论】:

  • 感谢您提出这个问题,所以答案已经为我准备好了:-)
  • 你快到了! '重写 ^ /base.html 中断;'正如@kolbyjack所指出的,应该可以工作

标签: javascript nginx history


【解决方案1】:

我认为这会为您解决问题:

location / {
    try_files /base.html =404;
}

【讨论】:

  • [emerg] 613#0:“try_files”指令中的参数数量无效?
  • 好吧试试这个:try_files $uri /base.html;
  • 注意——这将首先检查请求的文件,如果不存在,它将提供base.html。因此,请确保您的文档根目录中没有旧的额外文件,否则如果被查询,它们将被直接提供。
  • 使用try_files '' /base.html;(空字符串作为try_files的第一个参数)可以避免查找名为$uri的文件。
  • try_files '' /base.html; 给了我一个重定向问题和一个内部服务器错误,但如果它对任何人有帮助,将其修改为 try_files '' /base.html =404; 即可解决此问题。
【解决方案2】:

仅使用 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;
}

【讨论】:

  • try_files '' /base.html =404;(见上文)
  • 这对我有用,但我实际上不需要 location = /base.html { expires 30s } 部分。
【解决方案3】:

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

rewrite ^ /base.html break;

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

【讨论】:

  • 对我来说最好的答案。其他人不适合我
【解决方案4】:

这对我有用:

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

这使我能够为 javascript 单页应用程序创建一个包罗万象的 URL。 npm run build 构建的所有静态文件,如 css、字体和 javascript,如果它们与 index.html 位于同一目录中,则将被找到。

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

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}

【讨论】:

  • tks,这对我有用,但alias 处的斜线很重要
【解决方案5】:

这对我有用:

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

【讨论】:

  • 对于 React 应用程序的生产版本,这可以工作:try_files $uri $uri/ /index.html =404;。为什么?因为构建包含更多其他文件,包括静态 JavaScript 和 CSS 文件。
【解决方案6】:

正确的方法是:

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

使用last会让nginx根据重写的结果找到一个新的合适的location块。

try_files 也是解决此问题的一种完全有效的方法。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2012-12-21
    • 2017-01-22
    相关资源
    最近更新 更多