2016-11-28 79 views
1

全部, 我是nginx和服務器的新手,我無法處理nginx重寫規則。我想小寫所有的URL並刪除一些字符串。 我有一個電子商務網站,目前的URL結構是這樣的:(爲了避免被認作計算器鏈接,我加之間的HTTP和空間:故意)Nginx重寫(小寫和子串)

product page: http ://www.example.com/Some-Product-pd123456.html 
product category: http ://www.example.com/Product-Cat-pl12345.html 
page a: http ://www.example.com/About-Us.html 
page b: http ://www.example.com/Contactus.html 

所以,我想達到的目標是這些:

product page: https ://www.example.com/product/some-product/ 
product category: https ://www.example.com/category/product-cat/ 
page a: https ://www.example.com/about-us/ 
page b: https ://www.example.com/contact-us/ 

注意到,我的網站會從http到https,而且我有多個頁面,如頁面(同一模式)和多頁面網頁一樣b(無圖案)。這是到目前爲止,我做了什麼:

//product 
location ~ ^http:\/\/www\.example\.com\/(.*)-pd\d{6}\.html$ { 
    return 301 https://www.example.com/product/$1/; 
} 

//product category 
location ~ ^http:\/\/www\.example\.com\/(.*)-pl\d{5}\.html$ { 
    return 301 https://www.example.com/category/$1/; 
} 
//Page a 
location ~ ^http:\/\/www\.example\.com\/(.*)\.html$ { 
    return 301 https://www.example.com/$1/; 
} 

//Page b 
location ~ ^http:\/\/www\.example\.com\/Contactus\.html$ { 
    return 301 https://www.example.com/contact-us/; 
} 

所以我的問題是如何先小寫的網址,然後應用上面的規則,如果他們是正確的,或讓他們在一起更精美,高效,爲更好的網站速度?位置順序是否重要?謝謝你的幫助。

+0

'http:'不是'location'和'rewrite'指令使用的規範化URI的一部分(並且你不需要轉義'/'字符)。你有沒有考慮用'location〜*'忽略大小寫?有關詳細信息,請參閱[此文檔](http://nginx.org/en/docs/http/ngx_http_core_module.html#location)。 –

+0

嗨,理查德,謝謝你的改正和你提供的鏈接幫助我很多。我終於找到了解決方案,我將它作爲答案發布。 – davidchannal

回答

0

我在這裏回答我自己的問題。
爲了小寫url,一種方法是使用perl。 看看這個答案:https://stackoverflow.com/a/11170826/7218247

然後,以產品頁面爲例,這裏是我的服務器模塊代碼:

location ~* "/(.*)-pd\d{6}\.html$" { 
     return 301 http://www.example.com/product/$1/; 
} 

指出的,如果你有{}在你的正則表達式,你需要雙引號外。