bruceman 2017-8-15 12:09
Ubuntu 16.04 下Nginx支援中文URL(UTF8編碼)rewrite路徑重寫匹配
最近遇到了使用Nginx 重寫中文UTF8編碼路徑的問題。才發現默認情況下Nginx的rewrite是不支持UTF8匹配的。比如:<br><br>rewrite ^/(..)$ /2個字符文章.html break; #用2個點<br>可以匹配到 /ab 或 /51, 但 /漢字 是匹配不到的。我測試了一下, 要匹配兩個字的 /漢字 路徑, 得用<br><br>rewrite ^/(……)$ /2個漢字文章.html break; #要用六個點<br><br>如果要讓 ^/(..)$ 匹配到2個漢字字符,得開啟Nginx對UTF8字符的正則支持, 準確點說是開啟Nginx使用的PCRE庫的對UTF8字符的支持。因為Nginx的rewrite模塊是調用PCRE來處理正則的。如果PCRE沒有問題,Nginx支持UTF8編碼的重寫樣式是:<br><br>rewrite "(*UTF8)^/(..)$" /2個字符文章.html break;<br>#注意(*UTF8)前綴和引號的加入。<br><br>因為PCRE只有7.9以上的版本才支持這個(*UTF8)開頭,所以系統上的PCRE一定要使用7.9以上的版本。<br>目前已知 <br>CentOS 6.8 只支援 pcre 7.8 <br>CentOS7 支援到 8.32<br>Ubuntu 16.04 已經支援到 pcre 8.38<br>所以只要是新版的作業系統可以不用再 compiler 的情況下...就可以支援中文URL(UTF8編碼)rewrite路徑重寫囉~<br><br>參考文章:<br><a href="http://www.cslog.cn/Content/nginx-pcre-utf8-rewrite/" target="_blank">http://www.cslog.cn/Content/nginx-pcre-utf8-rewrite/</a>