nginx 将静态资源重写到不同的路径

nginx 将静态资源重写到不同的路径

我有一个主应用程序位于root/app/web

然后是子目录中的另一个应用程序 - /app/web/second

页面位于/app/web/second/<env>/page

资产位于/app/web/second/<env>/css/app/web/second/<env>/js

<env>可以是dev(暂存)或dist(生产),因此会根据实例而改变。

在代码中,资产被引用为例如/second/css/style.css。我需要将这些请求重写到其正确的文件系统位置,例如/app/web/second/dev/css/style.css

以下是我必须处理请求的内容dev

  root  /app/web;

  location /rsvp {
    alias  /rsvp/dev;
    rewrite  ^/rsvp/([a-z0-9-]+)/?$ $document_root/page/title.php?id=$1 last;
    rewrite  ^/rsvp/(.+)\.(css|js)$ $document_root/$1/$2 last;
  }

页面重写工作正常。脚本日志显示:

GET /second/foobar HTTP/1.1 200 > /app/web/second/dev/page/title.php

资产重写完全不同。root未添加前缀,并且alias重复。脚本日志:

GET /second/css/style.css HTTP/1.1 404 > /second/dev/second/dev/css/style/css
GET /second/js/script.js HTTP/1.1 404 > /second/dev/second/dev/js/script/js

这是一个遗留的代码库,因此保留它比将其重构为更好的结构更为重要。

答案1

我假设rsvpsecond你问题中的意思是一样的。

我会尝试以下配置:

location /rsvp {
    root /rsvp/dev;

    location ~ /rsvp/([a-z0-9-]+)/?$ {
        try_files /title.php?id=$1 =404;
    }

    location ~ ^/rsvp/(.+)\.(css|js)$ {
        try_files /$1$2 =404;
    }
}

该模式是为 配置通用的roottry_files然后在location指令中使用正则表达式来捕获相关部分以形成中的文件名部分try_files

相关内容