我有一个主应用程序位于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
我假设rsvp
和second
你问题中的意思是一样的。
我会尝试以下配置:
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;
}
}
该模式是为 配置通用的root
,try_files
然后在location
指令中使用正则表达式来捕获相关部分以形成中的文件名部分try_files
。