Подтвердить что ты не робот

Настройка nginx для одностраничного веб-сайта с URL-адресом состояния HTML5 push

Как настроить nginx на перенаправление всех URL-адресов (не добавленных с помощью /api или какого-либо статического ресурса, например JS/images), на index.html? Причина в том, что я использую URL-адрес состояния HTML5 с одностраничным приложением. Значение контента изменяется, зависит ли AJAX или JS от URL

Моя текущая конфигурация 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;
    }
}
4b9b3361

Ответ 2

mattes answer - это почти решение, однако оно не даст 404 для отсутствующих файлов (например, favicon.icon), как указано в aschepis.

Nginx будет выбирать первое место, которое соответствует. Поэтому мы можем сначала сопоставить файлы (что даст 404, если файл не существует). И после размещения местоположение, которое по умолчанию index.html для всех URL.

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

Ответ 3

Вам нужно добавить в конфигурационный файл 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/