在 Nginx 配置中,root 和 alias 都用于定義文件路徑,但它們的行為有重要區別,特別是 路徑拼接方式 和 末尾斜杠 (/) 的影響。
1. root 和 alias 的區別
(1) root 指令
作用:root 會將 location 的 URI 拼接到 root 路徑后面,形成完整的文件路徑。
語法:
nginx
location /prefix/ {
root /path/to/files;
...
}
訪問邏輯:
text
請求 URI: ? /prefix/file.txt
實際路徑: ?/path/to/files/prefix/file.txt
示例:
nginx
location /static/ {
root /var/www/html;
}
訪問 /static/hello.html → 實際讀取 /var/www/html/static/hello.html
(2) alias 指令
作用:alias 會 直接替換 location 的 URI 部分,不會拼接 location 路徑。
語法:
nginx
location /prefix/ {
alias /path/to/files/;
...
}
訪問邏輯:
text
請求 URI: ? /prefix/file.txt
實際路徑: ?/path/to/files/file.txt ?(/prefix/ 被替換)
示例:
nginx
location /images/ {
alias /var/www/media/;
}
訪問 /images/cat.jpg → 實際讀取 /var/www/media/cat.jpg(/images/ 被替換)
2. 末尾斜杠 (/) 的影響
(1) root 末尾加不加 / 不影響
root /path/to/files 和 root /path/to/files/ 效果相同。
因為 root 只是指定基礎目錄,Nginx 會自動處理路徑拼接。
(2) alias 末尾必須加 /(推薦)
? 正確寫法:
nginx
location /prefix/ {
alias /path/to/files/; ?# 末尾帶 /
}
訪問 /prefix/file.txt → /path/to/files/file.txt
? 錯誤寫法(可能導致 404):
nginx
location /prefix/ {
alias /path/to/files; ?# 末尾不帶 /
}
訪問 /prefix/file.txt → /path/to/filesfile.txt(路徑錯誤!)