正則表達(dá)式 - nginx 正則,如何匹配不以/結(jié)尾且不以.xml .html .htm結(jié)尾
問題描述
需求需要一個(gè)正則表達(dá)式,在 nginx 中使用。如果$uri 不是以/結(jié)尾且不以.xml 、.html、.htm 結(jié)尾的,才 permanent 到$uri/。
location @rewrite { rewrite [^/]$ $uri/ permanent; rewrite . /index.php?s=$uri&$args last;}嘗試
我自己的寫法,但是失敗:
rewrite ([/]|.xml|.html?)$ $uri/ permanent;提問
1)如何才可以實(shí)現(xiàn)不以.xml .html /結(jié)尾的才重寫的正則。2)如何才可以在正則表達(dá)式[]中排除完整的一段單詞?補(bǔ)充
我使用了這一句,貌似暫時(shí)沒有發(fā)現(xiàn)問題。
rewrite [^/|.xml|.html?]$ $uri/ permanent;
疑問,方括號[]中的不是 a-zA-Z0-9 嗎,也可以寫完整的匹配字符串?
問題解答
回答1:你需要的是 支持 并、交、差 的正則表達(dá)式引擎:http://nfabo.cn/p/?p=1280在nginx中,只能用否定反向環(huán)視: .*(?<!.xml|.html|.htm|/)$
回答2:你可以先把這些.html,.htm,.xml結(jié)尾的文件rewrite到他們原來的目錄,剩余的在應(yīng)用你的重寫規(guī)則就達(dá)到了你的這個(gè)目的。
