Autoindex切断目录path的结尾; 需要解决方法

我试图build立一种与nginx共享主机,其中每个用户都有一个public_html目录。 请求/~username别名/home/domain-users/username/public_html 。 问题是,我也想启用autoindexing。 通过将下面的configuration添加到服务器块中,对/ /~username/test.txt等特定文件的请求可以/~username/test.txt工作; 它们被别名为/home/domain-users/username/public_html/test.txt 。 然而,当试图请求/~username~/username/ ,我得到一个404和/var/log/nginx/error.log显示autoindex是由于某种原因试图列出/home/domain-users/username/public_htm (注意丢失的“l”:path被截断。)

由于能够访问/~username没有作为目录的尾部斜杠不是至关重要的,我试图从try_files指令中删除$public_html_path/ 。 然后,即使请求/~username/ 〜username /~username/ ,autoindex也不会被调用。 try_files可能需要使用文字尾部的斜线来使autoindex起作用。

 # For requests to "/~username" without a trailing slash set $public_html_path ""; # Lazy quantifier at the end allows processing requests to "~/username". We add the trailing slash later in try_files location ~ ^\/\~(?<user_home_folder>[^\\n\/]+)(?<public_html_path>\/.*)?$ { alias /home/domain-users/$user_home_folder/public_html; autoindex on; try_files $public_html_path $public_html_path/ =404; } 

我的研究收效甚微,最接近的是这个StackOverflow的问题 。 由于这似乎是一个NGINX中的错误,不太可能被修复(最后一个评论是在一年以前),我正在寻找一个解决方法。 使用root指令而不是alias将是完美的,除了autoindex删除关键/~username/部分的URI,认为它列出的文件是在Web根,因为在某种程度上,他们是。 即使哈克变通办法将非常赞赏…谢谢!

在正则expression式location使用alias时,需要重buildalias值中的整个path名。 详情请参阅此文件 。

 location ~ ^/~(?<user_home_folder>[^/]+)(?<public_html_path>/.*)?$ { alias /home/domain-users/$user_home_folder/public_html$public_html_path; autoindex on; } 

由于这个问题,一起使用try_filesalias可能会导致并发症。 但是,默认行为几乎与您的问题中的try_files语句相同。