自動索引切斷目錄路徑的結尾;需要解決方法
我正在嘗試使用 nginx 設置一種共享主機,其中每個使用者都有一個
public_html
目錄。請求/~username
別名為/home/domain-users/username/public_html
. 問題是,我還希望啟用自動索引。將下面的配置添加到伺服器塊中,對特定文件的請求就可以/~username/test.txt
正常工作;它們別名為/home/domain-users/username/public_html/test.txt
. 但是,當嘗試請求/~username
or時~/username/
,我得到一個 404 並/var/log/nginx/error.log
顯示 autoindex 出於某種原因試圖列出其中的文件/home/domain-users/username/public_htm
(注意缺少的“l”:路徑被截斷。)由於能夠在
/~username
沒有尾隨斜杠的情況下作為目錄進行訪問並不重要,因此我嘗試$public_html_path/
從try_files
指令中刪除。然後,即使在請求時/~username/
,也不會呼叫 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 question。由於這似乎是 NGINX 中不太可能修復的錯誤(最後一條評論是一年多以前),我正在尋找一種解決方法。使用
root
指令代替alias
將是完美的,除了 autoindex 刪除/~username/
URI 的關鍵部分,認為它列出的文件在 web 根目錄中,因為在某種程度上,它們是。即使是駭人聽聞的解決方法也將不勝感激……謝謝!
alias
與正則表達式一起使用時location
,您需要在值中重構整個路徑名alias
。有關詳細資訊,請參閱此文件。location ~ ^/~(?<user_home_folder>[^/]+)(?<public_html_path>/.*)?$ { alias /home/domain-users/$user_home_folder/public_html$public_html_path; autoindex on; }
由於這個問題,一起使用
try_files
and可能會導致並發症。但是,預設行為實際上與您問題中的陳述相同。alias``try_files