Ответ 1
location / {
try_files $uri /index.html;
}
Это проверит, существует ли запрошенный файл и возвращает его. Если файл не существует, он вернет index.html.
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
Как настроить 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;
}
}
location / {
try_files $uri /index.html;
}
Это проверит, существует ли запрошенный файл и возвращает его. Если файл не существует, он вернет index.html.
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
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;
}
Вам нужно добавить в конфигурационный файл 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/