我有非常简单的nginx配置,里面有3个位置。他们每个人都有自己的根目录+我以后应该可以轻松添加另一个目录。
我想要的是什么:
请求/admin
=>位置^/admin(/|$)
请求/admin/
=>位置^/admin(/|$)
请求/admin/blabla
=>位置^/admin(/|$)
请求/client
=>位置^/client(/|$)
请求/client/
=>位置^/client(/|$)
请求/client/blabla
=>位置^/client(/|$)
请求/blabla
=>位置/
请求/admin-blabla
=>位置/
请求/client-blabla
=>位置/
实际结果:
所有请求都转到/
位置。
我使用不同的别名,try_files,root和regex的组合尝试了来自docs,stackoverflow和其他来源的许多不同建议,但没有任何方法可以帮助我。
只有当我尝试仅使用return 200 'admin';
和return 200 'front'
时,它才能正常运行。
最小配置:
server {
listen 80;
index index.html;
location / {
root /var/www/html/www_new/front;
try_files $uri $uri/ /index.html;
}
location ~ ^/admin(/|$) {
root /var/www/html/www_new/admin;
try_files $uri $uri/ /index.html;
}
location ~ ^/client(/|$) {
root /var/www/html/www_new/client;
try_files $uri $uri/ /index.html;
}
}
目录结构:
谢谢
答案 0 :(得分:3)
当您更改根目录时,它仍然包含目录名称,因此您要做的只是设置location /
的根目录。您也不需要/admin
上的任何其他正则表达式,因为位置修饰符~
已经告诉nginx'以'开头的任何内容。
这适用于您的用例:
server {
listen 80;
index index.html;
location / {
root /var/www/html/www_new/front;
try_files $uri $uri/ /index.html;
}
location ~ ^/admin {
root /var/www/html/www_new; # the directory (/admin) will be appended to this, so don't include it in the root otherwise it'll look for /var/www/html/www_new/admin/admin
try_files $uri $uri/ /admin/index.html; # try_files will need to be relative to root
}
}