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

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

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

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

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

\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.jsgrep

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

相關文章
相關標籤/搜索