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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM