nginx将除api之外的所有请求重定向到一个文件

时间:2015-08-10 06:44:18

标签: nginx

有以下nginx配置:

server {
  listen 80;
  server_name orange.mwlab.co;
  root /home/hotels-app/domains/orange_web_app;
  location /api {
    passenger_enabled on;
    rails_env stage;
    root /home/hotels-app/domains/orange_app/current/public;
  }

  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
  }
}

我想做以下事情:除了来自API(/ api / ...)的请求之外的所有请求都重定向到/ home / hotels-app / domains / orange_web_app,因为我创建了单页应用程序,我需要返回除API请求之外的静态index.html。提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用try_files

server {
  listen 80;
  server_name orange.mwlab.co;
  root /home/hotels-app/domains/orange_web_app;
  location /api {
    passenger_enabled on;
    rails_env stage;
    root /home/hotels-app/domains/orange_app/current/public;
  }

  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    try_files $uri $uri/ /index.html =404;
  }
}

确保使用index.html的正确路径。

字符串try_files $uri $uri/ /index.html =404;表示现在所有不存在的网址都会转发到index.html文件,但不会在浏览器地址栏中重写网址。

这是一篇包含更多信息的博文(它是关于angularjs的,但大多数都适用于任何单页应用):http://senior-java-developer.com/html5angularjsnginx-crawlable-application/