19

/apiすべての URL (先頭に付加されていない、または JS/images などの静的リソース) をにリダイレクトするように nginx を構成するにはどうすればよいindex.htmlですか? 理由は、単一ページのアプリケーションで HTML5 プッシュ状態 URL を使用しているためです。URLによってAJAXかJSか意味内容が変わる

私の現在のnginx設定は次のようになります:

server {
    listen 2000;
    server_name localhost;

    location / {
        root    /labs/Projects/Nodebook/public;
        index   index.html;
    }

    location /api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://localhost:3000/;
        proxy_redirect off;
    }
}
4

3 に答える 3

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

これは、要求されたファイルが存在するかどうかを確認し、それを返します。ファイルが存在しない場合は、index.html が返されます。

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

于 2014-07-02T19:27:52.913 に答える
6

マットの答えはほとんど解決策ですが、aschepisが指摘したように、欠落しているファイル(favicon.iconなど)に対して404は返されません。

Nginx は、一致する最初の場所を選択します。そのため、最初にファイルを照合できます (ファイルが存在しない場合は 404 が返されます)。そして、すべての URL に対してデフォルトで index.html になる場所を配置します。

    location /.+\..+ { # files (assuming they always have a dot)
        # use eg alias to serve some files here
    }

    location / { # url routed by client, client gives 404 for bad urls
        try_files $uri /index.html;
    }
于 2015-08-21T10:12:04.987 に答える
2

nginx 構成ファイルに追加する必要があります。

 rewrite ^(.+)$ /index.html last;

次に、Backbone.js を使用しているとします。未定義のルートを 404 ページに再ルーティングするようにしてください。

  routes: {
    // Other routes
    "*path"  : "notFound"
  },

  notFound: function(path) {
    // Load 404 template, probably of a cute animal.
  }

ソース: http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/

于 2013-04-05T11:22:04.157 に答える