2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
經(jīng)過多次測試,自己搞明白了。
這三條規(guī)則并沒有什么問題,第二條也并不是我之前所說的有什么詭異的地方。
首先,nginx會(huì)根據(jù)用戶自定義的規(guī)則進(jìn)行匹配,當(dāng)你輸入的路徑存在且在最后不含有斜杠時(shí),
由于我這個(gè)文件夾下存在index.php,所以$request_filename/index.php
匹配第二條規(guī)則成功,注意這里的/
,然后進(jìn)行之后的匹配。也就是說,只要這個(gè)文件夾是存在的,且這個(gè)文件夾下有 index.html 或者 index.php 就會(huì)匹配我上面給出的第一條或者第二條規(guī)則,這沒有任何疑問。
所以,你如果想要在文件夾存在時(shí)不會(huì)進(jìn)行第一或者二條規(guī)則之后的匹配且會(huì)自動(dòng)加斜杠,解決辦法是在第一條規(guī)則之前加上一條對(duì)文件夾的判斷:
if (-d $request_filename){ rewrite ^/(.*)([^/])$ /$1$2/ permanent; }
這條規(guī)則的意思是,如果文件夾存在且沒有斜杠時(shí)自動(dòng)加斜杠并進(jìn)行301跳轉(zhuǎn),OK,問題解決。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
最后一條的邏輯是,在不滿足前面條件的情況下,“如果訪問的路徑不是文件”就自動(dòng)跳轉(zhuǎn)到/index.php。
建議:在第三條之前插入一句 -e 檢測是否是文件夾,如果是,自動(dòng)加斜杠,break。
未測試,僅供參考。
- 2 回答
- 0 關(guān)注
- 237 瀏覽
添加回答
舉報(bào)