1
a282810 2017-05-10 18:23:22 +08:00
根据记忆写的,楼主自行测试
location /123/ { alias /data/123/; } 或 location /123/ { root /data/; } |
2
ryd994 2017-05-11 05:05:36 +08:00
1. 如果是要 www.1.com/123 -> /data/123 的话,不需要配置,本来就是
2. 如果是要 www.1.com/123 -> /data/123/123 的话: location ~ ^/(.*)/.* { root /data/$1; } 我没测试过不过就是这么个意思,regex 捕捉 另外还可以 named capture,语法自己搜 nginx named capture |
3
djhuahao OP @a282810 不好意思我可能没说清楚,用户 /后面输入的信息是未知的。也就是可能是 /123 /456 又或者其他。
|
6
ryd994 2017-05-11 10:21:12 +08:00
root 目录的意思是
www.1.com/123/abc.file -> /data/123/abc.file 按你的字面意思是 www.1.com/123/abc.file -> /data/123/123/abc.file 我给的 match 不生效的话,reload 了么?以及我是假设路径总是超过两级 |
7
djhuahao OP @ryd994 是这样的,我现在开放了 /data 目录给用户上传文件夹,文件夹的命名我并不知道,但是都以 x 编号开头。
所以我只能识别用户网址后的 /路径并跳转到相应的 root 目录里。比如 www.123.com/x666 跳到 root 目录为 /data/x666/file server { server_name www.123.com; set $root /data; if ($host ~* ^/(.*)) { set $root $root/$1; } root $root; } 我尝试了以上的方法能够实现修改 root 目录为 /data/x666,却不能跳转到 /data/x666/file 也就是说 if ($host ~* ^/(.*)) { set $root $root/$1/file; } 不生效。 还请指点,谢谢。 |
8
ryd994 2017-05-11 15:55:16 +08:00
@djhuahao 因为你这配置就是错的
if is evil 你对 root 的理解有误 root /data/ 就够了 因为根后面接的是 url,也就是说 example.com/123/abc.file -> /data/123/abc.file 这就是自然状态 至于你说不能跳转,问题未必是这个,error log 呢? |
9
djhuahao OP @ryd994 因为我有特殊需求,对于用户来说我的路径是隐藏的,所以只是希望用户输入 /123 时候 root 目录自动的对应(因为目录里已经有主页文件了),前端就只是会显示 example.com/123 从而显示出首页。
|
10
ryd994 2017-05-11 16:44:49 +08:00
|
11
a282810 2017-05-11 18:22:40 +08:00
如果 /data 目录下的文件夹的命名是有规律的,可以匹配的到那就直接用正则
比如: location ~ ^/x(.*) { root /data; } |