Nginx 在单页应用程序中重写 URL

Nginx 在单页应用程序中重写 URL

我一直遇到这个 nginx 配置问题,在浏览了这个网站之后,我想知道这是否可行。

我有一个非常简单的单页应用程序,具有以下路由:

server {
        listen 80 default_server;

        root /var/www/html;

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

此配置提供的 SPA(如果重要的话,是 Gatsby 网站)包含提供特定内容的路由,例如domain.com/aboutdomain.com/about/some-page。但是,有一个旧版本的网站不是 SPA,它有页面,例如domain.com/about.htmldomain.com/about.html#some-page,它们分别提供等效内容。

我真的很希望能够重定向domain.com/about.html>domain.com/aboutdomain.com/about.html#some-page> domain.com/about/some-page,以便世界上已经存在的指向该网站的旧链接仍然转到 SPA 的正确路线,但我创建重写的所有尝试要么只返回 404,要么直接返回到根目录。

是否可以同时重写 URL(所以domain.com/about.html> domain.com/about)并将该 URL 重定向到/index.html以使其作为 SPA 工作?

答案1

我能够通过保持 nginx 配置相同并使用 Reach Router 在 Gatsby 中的客户端执行 URL 重写来解决此问题。

相关内容