2017-07-27 71 views
0

我幾乎是一個愚蠢的正則表達式,我剛剛開始使用基於雲的Nginx服務器,這是一個從管理我的in-my-壁櫥Apache服務器。乾淨的URI/URL Nginx重寫多個頁面和多個變量

我試圖做重寫得到乾淨的網址是這樣的:

www.domain.com/folder/red/abc ---> www.domain.com/folder/red.cfm?query=abc 
www.domain.com/folder/blue/ab/cd/ef ---> www.domain.com/folder/blue.cfm?name=ab&city=cd&state=ef 
www.domain.com/folder/blue/ab ---> www.domain.com/folder/blue.cfm?name=ab 

基本上我想要的「文件夾」子文件夾後,得到物品的重寫改寫爲靜態網頁.CFM。其中一些.cfm頁面有零個,一個,兩個或三個URL變量;變量的數量不固定或一致。

我一直在閱讀很多約重寫和try_files,我都試過了,哦,幾百不同重寫的變化,我只是似乎無法找到解決方案。

舉例來說,我已經試過:

location /folder/blue { 
    rewrite ^/folder/(.*)?$ /folder/blue.cfm?name=$1 last; 
     } 

而這只是讓我絕對行不通的。我會發布我的整個conf文件,但由於缺省服務器設置中添加了其他內容,因此它是long

我會使這個字符串儘可能簡單,但我真的需要幫助。我很感激!

回答

0

爲了將來的參考,它將有助於有一個規範。

好像這是你所提供的僅規格:

www.domain.com/folder/red/abc ---> www.domain.com/folder/red.cfm?query=abc 
www.domain.com/folder/blue/ab/cd/ef ---> www.domain.com/folder/blue.cfm?name=ab&city=cd&state=ef 
www.domain.com/folder/blue/ab ---> www.domain.com/folder/blue.cfm?name=ab 

如下解決方案100%滿足上述 「規範」:

location /folder/red/ { 
    rewrite ^(/folder/\w+)/(\w*)$ $1.cfm?query=$2 last; 
    return 410; 
} 
location /folder/blue/ { 
    rewrite ^(/folder/\w+)/(\w*)$ $1.cfm?query=$2 last; 
    rewrite ^(/folder/blue)/(\w*)/(\w*)/(\w*)$ $1.cfm?query=$2&city=$3&state=$4 last; 
    return 410; 
} 
+0

感謝帖子。我想我不知道如何爲此寫一個規範,但我想知道如何將一個'/ blue/ab/cd/ef'映射到帶有三個查詢變量(blue.cfm?1 = ab&2 = cd&3 = ef)​​,並將藍/ ab/cd映射到具有兩個變量(blue.cfm?1 = ab&2 = cd)的URL,並將'blue/ab'映射到一個變量URL。 ......我怎樣才能涵蓋尾部斜線可能會或可能不會被省略的情況,即'blue/ab'指向與'blue/ab /'相同的方向,我真誠地感謝您的幫助。 – GoOutside

+0

只需添加更多'rewrite'指令來覆蓋更多的案例。要覆蓋沒有結尾斜槓的'/ folder/blue',在頂層添加一個新位置 - 'location =/folder/blue {return 301/folder/blue /;} – cnst