環(huán)境:nginx版本為1.2.6最近在做項目時遇到一個奇怪的問題,因為要重新設(shè)計url,所以用到了以下nginx重寫規(guī)則:if(-f$request_filename/index.html){rewrite(.*)$1/index.htmlbreak;}if(-f$request_filename/index.php){rewrite(.*)$1/index.php;}if(!-f$request_filename){rewrite(.*)/index.php;}這個重寫規(guī)則已經(jīng)普遍使用,我也不知道有沒有什么地方不妥~(求指點)在我沒有使用這些規(guī)則時,訪問服務(wù)器上一個存在的目錄時會自動加個斜杠,這時觸發(fā)了nginx自動的rewrite規(guī)則,這很正常,沒有問題。但是我加了上面這些規(guī)則后,訪問服務(wù)器上已經(jīng)存在的文件夾時就不會自動加斜杠了,而且,在我反復(fù)測試后,發(fā)現(xiàn)是第2、3條規(guī)則在作怪:1、如果只把第2條規(guī)則刪除,那么不無論你文件夾存不存在都會檢測成不存在,而且不會加斜杠,并且會直接進入第3條規(guī)則,最終匹配進入index.php,可以得知,此時是按文件來處理的。2、如果把第2條規(guī)則刪除,第3條規(guī)則對文件的判斷-f改為-e,即文件或文件夾:if(!-e$request_filename){rewrite(.*)/index.php;}這時,問題得以解決,目錄存在時會自動加斜杠,不存在時會匹配進入到index.php,這正是我想要的。我很不解,求大師指點,為什么會是這個樣子呢?另外,由于項目原有的一些問題,在第3條規(guī)則里面還有一大坨其它針對性的重寫規(guī)則,所以我并不希望在輸入的是文件夾而且存在時還會進入第3條規(guī)則去匹配規(guī)則,雖然性能影響并不大。
nginx 目錄后面斜杠問題
慕尼黑8549860
2019-04-23 15:35:56