解決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