我正在尝试使用 nginx 设置一种共享主机,其中每个用户都有一个public_html
目录。对 的请求/~username
别名为/home/domain-users/username/public_html
。问题是,我还想启用自动索引。将下面的配置添加到服务器块中后,对特定文件(如 )的请求可以/~username/test.txt
正常工作;它们别名为/home/domain-users/username/public_html/test.txt
。但是,当尝试请求/~username
或 时~/username/
,我得到 404 并/var/log/nginx/error.log
显示自动索引出于某种原因试图列出 中的文件/home/domain-users/username/public_htm
(请注意缺少“l”:路径被截断。)
由于能够/~username
以不带尾部斜杠的方式访问目录并不重要,因此我尝试$public_html_path/
从try_files
指令中删除。然后,即使在请求时/~username/
,也不会调用 autoindex。也许 autoindex 需要文字尾部斜杠try_files
才能运行。
# 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 根目录中,因为从某种意义上说,它们确实位于 Web 根目录中。即使是黑客式的解决方法也会非常受欢迎……谢谢!