搜尋

首頁  >  問答  >  主體

正規表示式 - nginx 正規表示,如何搭配不以/結尾且不以.xml .html .htm結尾

需求

需要一個正規表示式,在 nginx 中使用。
如果$uri 不是以/結尾、不以.xml 、.html、.htm 結尾的,才 permanent 到$uri/。

location @rewrite {
    rewrite [^\/]$ $uri/ permanent;
    rewrite . /index.php?s=$uri&$args last;
}

嘗試

我自己的寫法,但是失敗:

rewrite ([\/]|.xml|.html?)$ $uri/ permanent;

提問

1)如何才可以实现不以.xml .html /结尾的才重写的正则。
2)如何才可以在正则表达式[]中排除完整的一段单词?

補充

我使用了這一句,似乎暫時沒有發現問題。

rewrite [^\/|\.xml|\.html?]$ $uri/ permanent;

疑問,方括號[]中的不是 a-zA-Z0-9 嗎,也可以寫完整的匹配字串?

过去多啦不再A梦过去多啦不再A梦2774 天前906

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-05-16 17:27:48

    你需要的是 支援 並、交、差 的正規表示式引擎:http://nfabo.cn/p/?p=1280
    在nginx中,只能用否定反向環視: .*(?<!.xml|.html|.htm|/)$

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 17:27:48

    你可以先把這些.html,.htm,.xml結尾的檔案rewrite到他們原來的目錄,
    剩餘的在應用你的重寫規則就達到了你的這個目的。

    回覆
    0
  • 取消回覆