Nginx重写多个入口点

时间:2018-01-03 14:23:52

标签: nginx

我有这样的结构。

  • 项目根目录
    • entry_point1
      • 的index.html
    • entry_point2
      • 的index.html
    • entry_point3
      • 的index.html

它开箱即用,当我路由到mydomain / entry_point1时,它提供正确的index.html

但是,如果我想将域的根(/)或任何其他无法识别的路由路由到特定入口点,该怎么办? 例如:

  

mydomain /

     

mydomain / some / path mydomain / some / other / path

必须将所有这些路径重定向到mydomain / entry_point3

但显然路线如下:

  

MYDOMAIN / entry_point1 /一些/资源

不会被重定向

我怎样才能做到这一点?

我还使用 react router ,因此mydomain / entry_point1 / path / to / resource等路由将被重写为入口点的索引文件

提前致谢

编辑: 我最终得到了以下配置:

server {
  root path/to/folder;
  index index.html index.htm;

  server_name mydomain;

  location ~^\/entry1\.* {
      try_files $uri $uri/ /entry1/index.html;
  }

  location ~^\/entry2\.* {
      try_files $uri $uri/ /entry2/index.html;
  }

  location ~^\/entry3\.* {
      try_files $uri $uri/ /entry3/index.html;
  }

  location ~* {
      try_files $uri $uri/ /entry3/index.html;
  }
}

现在的问题是,当我路由到mydomain /它将我重定向到:mydomain / entry3 / entry3 / entry3 /....

除此之外,它完美无缺。

当我路由到 mydomain /(entry1 | entry2 | entry3)/ some / resource 时,它提供(entry1 | entry2 | entry3)/index.html

当我路由到 mydomain / some / other / path 时,它会提供entry3 / index.html

1 个答案:

答案 0 :(得分:0)

server {
  listen 8081;

  location ~^\/entry2\.* {
    return 301 $scheme://www.entrypoint2.com$request_uri;
  }
  location ~^\/entry1\.* {
    return 301 $scheme://www.entrypoint1.com$request_uri;
  }
  location ~* {
    return 301 $scheme://www.entrypoint1.com/;
  }
}

curl -X GET“http://badasse.com:8081/entry1” - I => http://www.entrypoint1.com/entry1

curl -X GET“http://badasse.com:8081/entry1/sdfsdf” - I => http://www.entrypoint1.com/entry1/sdfsdf

curl -X GET“http://badasse.com:8081/entry2” - I => http://www.entrypoint2.com/entry2

curl -X GET“http://badasse.com:8081/entry2/sdfdsf” - I => http://www.entrypoint2.com/entry2/sdfsdf

curl -X GET“http://badasse.com:8081/esdfdsf” - I => http://www.entrypoint1.com/entry1