如何使用 (location/rewrite/proxy) 呈现特定内容但不更改 Nginx 中的原始 URL?

如何使用 (location/rewrite/proxy) 呈现特定内容但不更改 Nginx 中的原始 URL?

location我对 Nginx 的、指令有所了解rewrite

我有一个名为 的文件say_hi.html,其路径:/opt/app,其内容:

# file name:  /opt/app/say_hi.html
Hi, there! 

我想在浏览器中打开此 URL:http://my_site.com/to/be/removed/say_hi.html并查看内容

Hi, there!

并且 URL 未改变。(例如未更改为http://my_site.com/say_hi.html:)

我可以在 Nginx 中执行此操作吗?

多谢!

顺便说一句,我已经有这个解决方案,但不能满足我的需求:(它改变了 URL 并返回 301)

 server {
   listen 80 default_server;
  
   location / {
     try_files $uri $uri/ =404;
     root /opt/app/;
   }

   location ~ /to/be/removed {
     rewrite ^/abc(.*)$ $1 break;
   }

答案1

好的,我通过使用location+proxy pass和 a 来解决这个问题virtual host

步骤 1:确定位置并将其提供给proxy,例如:

  location ~ /to/be/removed {
    proxy_pass http://localhost:8800;
  }

第 2 步:定义代理服务器:

server {
  # define a port
  listen 8800;

  # step 2.1: change "/abc/test" to "/test"
  location ~ /abc/test {
    root /opt/app/test_folder;   # this line must be here ,not removed.
    rewrite ^/abc(.*)$ $1 break;
  }

  # step 2.2:this is the normal way to render html/js
  location / {
    root /opt/app/test_folder;
  } 
} 

其实还有另一种解决方案:

重新编译front-end项目(例如vue,react-js,angular)并为其添加前缀。

相关内容