我的配置代碼:
index index.html index.php;
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/ =404;
}
如果url是/a/
,301到/a
,然後try_files
部分,添加/
到/a
末尾,成為/a/
。
下一步,我認為它將嘗試index
定義,成為/a/index.html
,並到達文件。
但實際上,它嘗試了/a/
,跳出location
,然後再次進入location
,到if ($uri = '/a/') { ... }
。
然後無限循環。
為什麼,我只是感到困惑。
我想做的是
- 如果請求
example.com/a/
,跳到example.com/a
,然後跳到 2 - 如果請求
example.com/a
,則顯示example.com/a/index.html
(但 url 是example.com/a
)。
有人可以幫助我實現這個目標嗎?
答案1
它正在做它應該做的事情。
你永遠無法到達,/a/index.html
因為你不斷重定向回到/a
這可能發生之前。當 nginx 處理這個問題時,它會看到檔案系統上的目錄並自動(正確)重定向到/a/
.
您應該刪除這個不適當的重定向。
答案2
歡迎來到伺服器故障。您可以使用以下程式碼執行OP中提到的操作...
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/index.html =404;
}
請參閱相關問題與接受的答案使用 nginx 刪除 URL 尾部斜杠。
基本上,我們不必依賴index
,而是在有請求index.html
時直接提供服務。example.com/a