nginx:从url中删除子目录



这个web应用程序我一直在目录/foo中,所以我可以访问http://example,com/foo。但现在他们已经将该目录更改为/foo/public,我必须转到https://example.com/foo/public

由于无聊的原因,对我来说最好的方法是从url中删除额外的子目录public,而不将文件移动到单独的位置。在nginx中,我该如何做到这一点?

我试了很多东西,包括:

location /foo {
root /var/www/example.com/htdocs/mysite/foo/public;
}

但由于某种原因,我要么得到403,要么得到404,说找不到目录/var/www/example.com/htdocs/mysite/foo/public/foo/index.php

编辑

配置文件的相关部分现在看起来如下:

location ~ /.ht {
deny  all;
}
location / {
root /var/www/example.com/htdocs/mysite;
}
location /foo/ {
alias /var/www/example.com/htdocs/mysite/foo/public/;
}
location ~ .php$ {
try_files $uri $uri/ =403;
fastcgi_split_path_info         ^(.+.php)(.*)$;
fastcgi_pass                    webmail;
fastcgi_index                   index.php;
fastcgi_param  SCRIPT_FILENAME  $request_filename;
include                         fastcgi_params;
fastcgi_param  QUERY_STRING     $query_string;
fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param  CONTENT_TYPE     $content_type;
fastcgi_param  CONTENT_LENGTH   $content_length;
}

现在看起来有一个问题,/foo/dir中的PHP文件不工作,并给我一个403错误(或者我在try_files行中设置的任何错误代码(。例如,应该有一个edit.php文件,当我试图打开它时,它会返回错误403。但是,还有一个example.js文件,当我们试图打开它的时候,它是有效的。

root基本上在请求的位置之前预先准备指定的路径,包括匹配的部分。这就是为什么/foo最终会出现在foo/public/foo目录中,而该目录并不存在,因此会出现错误。如果要用路径替换匹配的位置,则应使用alias

只要将root更改为alias就有望适用于您的案例。

来源:别名,根。

最新更新