【问题标题】:Nginx Rewrite(lowercase and substring)Nginx 重写(小写和子字符串)
【发布时间】:2023-03-25 07:54:01
【问题描述】:

所有, 我是 nginx 和服务器的新手,我无法处理 nginx 重写规则。我想小写所有网址并删除一些字符串。 我有一个电子商务网站,当前的 URL 结构是这样的:(为了避免被 stackoverflow 识别为链接,我特意在 http 和 : 之间添加了一个空格)

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,并且我有多个页面,如页面 a(相同模式)和多个页面,如页面 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/;
}

所以我的问题是如何首先将 url 小写,然后在它们正确的情况下应用上述规则,或者将它们更好地和有效地组合在一起,以获得更好的网站速度?位置顺序重要吗?感谢您的帮助。

【问题讨论】:

  • http: 不是 locationrewrite 指令使用的规范化 URI 的一部分(您不需要转义 / 字符)。您是否考虑过用location ~* 忽略大小写?详情请见this document
  • 嗨,Richard,感谢您的更正,您提供的链接对我有很大帮助。我终于找到了解决方案,我将其作为答案发布。

标签: nginx url-rewriting nginx-location


【解决方案1】:

我在这里回答我自己的问题。
为了小写 url,一种方法是使用 perl。 看看这个答案:https://stackoverflow.com/a/11170826/7218247

然后,以产品页面为例,这是我在服务器块中的代码:

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

注意,如果您的正则表达式中有 {},则外部需要双引号。

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2010-12-07
    • 2014-08-01
    • 2021-05-24
    相关资源
    最近更新 更多