2016-11-27 114 views
0

所以我有一個基於正則表達式的定位規則,這樣的事情:Nginx的 - 正則表達式的位置

location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/ 

我可以檢查哪些正則表達式的一部分,得到了比賽? 意思就是比我想如果URL像

/12abc34/ 

知道它是由

.*abc.* 

有沒有辦法匹配?

我正在使用AWS上的Debian VM運行最新的使用lua-module編譯的nginx。

------------更新-------------

我想用內部的位置,但是這將是醜陋:

location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/ 
{ 
    location ~ /(abc.*xyz){...} 
    location ~ /(def.*zxy){...} 
... 
} 

現在我有60個正則表達式模式。這樣的方法好嗎?

+0

你有沒有考慮過使用'map'和'$ request_uri'?有關詳細信息,請參見[本文檔](http://nginx.org/en/docs/http/ngx_http_map_module.html#map)。 –

回答

1

你的正則表達式表達:/(.*abc.*|.*def.*|.*ghk.*)/可以簡化爲:

location ~ (abc|def|ghk).*/ { ... } 

正如任何nginx URI始於/,你並不需要測試/.*

正則表達式的括號內的部分是location塊內捕獲作爲$1

因此,在/12abc34/的情況下,變量$1將被設置爲abc

+0

好的,但我也有像(xyz。* abc)這樣的規則。你提供的解決方案不幸的是不會爲此:( –