[Linux] 解決nginx: [emerg] directive "rewrite" is not terminated by ";"

  • 2019 年 11 月 23 日
  • 筆記

解決nginx: [emerg] directive "rewrite" is not terminated by ";" nginx的rewite規則有時候沒注意會報這個錯誤,原因是規則中存在{}會被認為是規則結尾報錯,使用""雙引號把規則包起來可以避免這個錯誤 還有就是nginx中的規則中/斜杠不必要反斜杠轉義/,自動會認識的

例如: rewrite "^/rny/webface/mailApps/(.*)(/d{6,})(.*)$" /webface/mailapps/dev/$1$3

.*和.*?的區別: .*?是非貪婪的,匹配到第一個/就停了 [root@localhost riadev]# echo "/rny/webface/mailApps/xxx/dfdffd/123456_abc.js"|grep -oP "^/rny/webface/mailApps/(.*?)/" /rny/webface/mailApps/xxx/

.*是貪婪的,匹配到了最後一個/ [root@localhost riadev]# echo "/rny/webface/mailApps/xxx/dfdffd/123456_abc.js"|grep -oP "^/rny/webface/mailApps/(.*)/" /rny/webface/mailApps/xxx/dfdffd/

d{6,}這個的意思是最少6個數字,超過的也能匹配到,少的匹配不到 grep是不能捕獲()中的內容,在nginx中後面的$就是可以捕獲到 [root@localhost riadev]# echo "/rny/webface/mailApps/xxx/dfdffd/123456abc.js"|grep -oP "^/rny/webface/mailApps/(.*)/(d{6,})(.*)" /rny/webface/mailApps/xxx/dfdffd/123456abc.js 這個時候的$1和$3分別是xxx/dfdffd 和 abc.js

rewrite "^/rny/webface/mailApps/(.*)(/d{6,})(.*)$" /webface/mailapps/dev/$1$3 會把/rny/webface/mailApps/xxx/dfdffd/123456abc.js 匹配到 /webface/mailapps/dev/xxx/dfdffd/abc.js