Nginx: 将所有请求发送到一个 html 页面

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

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

我仍然需要网址,我只是想总是使用相同的页面。

141458 次浏览

我想这个可以帮到你:

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

你原来的重写应该差不多可以了。我不知道为什么会重定向但我觉得你真正想要的是

rewrite ^ /base.html break;

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

仅仅使用 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 / {
rewrite (.*) base.html last;
}

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

try_files也是解决这个问题的一个非常有效的方法。

这对我很有效:

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/;
}

这对我很有效:

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