2016-11-28 81 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/; 
} 

指出的,如果你有{}在你的正则表达式,你需要双引号外。