这个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
就有望适用于您的案例。
来源:别名,根。