【问题标题】:Redirect url to url to www将 url 重定向到 url 到 www
【发布时间】:2019-05-14 11:30:16
【问题描述】:

我在 nginx 中将 url 重定向到 url 时遇到问题:

例如我有一个链接:

https://example.com/oferty-specjalne/szczegoly-oferty?OfferID=124296

工作功能:

location  ^/oferty-specjalne/szczegoly-oferty(.*)$  {
return 301 https://example.com/oferty-specjalne/; }

不工作的功能:

location ~ ^/oferty-specjalne/szczegoly-oferty\?OfferID=(124170|124296|124299|123483|63788|97002)$  {
return 301 https://example.com/oferty-specjalne/; }

location ~ ^/oferty-specjalne/szczegoly-oferty?OfferID=(.*)$ {
    return 301 https://example.com/oferty-specjalne/$1; }

location  ^/oferty-specjalne/szczegoly-oferty?OfferID=97002 {
return 301 https://example.com/oferty-specjalne/; }

我检查了测试人员中的正则表达式,一切正常。 我正在询问我在哪里犯了错误以及如何解决它,或者例如。

【问题讨论】:

  • 不是您问题的答案,但以防万一它给您带来问题:您在其中一个回报中有“域名”而不是“域名”。
  • 只是域名无所谓,反正都换过了,只是个例子。
  • Stack Overflow 是一个编程和开发问题的网站。将来,请使用 example.com。这就是 IANA 保留它的原因。
  • 谢谢关注,我会记住的:)
  • Stack Overflow 是一个编程和开发问题的网站。

标签: regex linux nginx redirect configuration


【解决方案1】:

? 之后的 URI 部分是查询字符串(或参数),而不是 locationrewrite 指令使用的规范化 URI 的一部分 - 所以你的规则永远不会匹配。详情请见this document

如果您有复杂的正则表达式需要匹配整个 URI(包括查询字符串),您需要使用 $request_uri 变量。这可以使用ifmap 进行测试。对于多个正则表达式,map 是首选解决方案。

例如:

map $request_uri $redirect {
    default 0;
    ~^/oferty-specjalne/szczegoly-oferty\?OfferID=(124170|124296|124299|123483|63788|97002)$
                                                                  /oferty-specjalne/;
    ~^/oferty-specjalne/szczegoly-oferty\?OfferID=(?<offerid>.*)$ /oferty-specjalne/$offerid;
    ~^/oferty-specjalne/szczegoly-oferty\?OfferID=97002           /oferty-specjalne/;
    ~^/oferty-specjalne/szczegoly-oferty                          /oferty-specjalne/;
}

server {
    ...
    if ($redirect) {
        return 301 $redirect;
    }

正则表达式按顺序计算,直到找到匹配的规则,因此将最具体的规则排在最前面,最不具体的最后。 使用命名捕获,因为数字捕获可能超出范围。 如果它们相同,则不需要指定方案或域名。 map 指令位于 `server 块之外。 详情请见this document

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2015-08-03
    • 2019-03-09
    • 2011-11-05
    • 2013-12-20
    • 1970-01-01
    • 2018-07-25
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多