如何在 Nginx 中重定向包含随机字符串的 URL

如何在 Nginx 中重定向包含随机字符串的 URL

在我的访问日志中,我随机得到了很多查询字符串,它们是这样的

    https://example.com/?rJWLuVR1=JXhedT2G
    https://example.com/?JuntjUsc=kfLAIJCx
    https://example.com/?c6wx3Tk4=aXDtGrKd
    https://example.com/?UEEwPi5r=q48ugHy0
    https://example.com/?HWDtubBC=TC4utO9p
    https://example.com/?Gqs8KzOp=klbC9t48
    https://example.com/?tTKR1vY0=knRAYtuG
    https://example.com/?jn2UFqCY=Ar08xrlr
    https://example.com/?pXmuazUj=CMTXGmhq
    https://example.com/?t443qiT7=VbXbxXuQ
    https://example.com/?aTScktcA=foaOJaVt
    https://example.com/?qbWcbdbu=CQgmMCQL
    https://example.com/?xUeZFI5s=8GEoS7jv
    https://example.com/?eS5viG89=aF59lpye

ETC...

  • 问号“?”后面没有特定的模式。

  • 包括第 9 位的“=”在内共有 17 个字符

我想将这些 URL 重定向到主页。

这是我目前所做的,但效果并不好。

location / {
    if ($args = "=") {
        return 301 https://example.com/;
    }
}

我应该做些什么?

问候

答案1

是的,您可以使用 if 语句中的正则表达式来重定向具有这些条件的 URL。

以下是一个操作方法的示例:

server {
    listen 80;
    server_name example.com;

    location / {
        if ($args ~ "^.{8}=.{8}$") {
            return 301 /;
        }
    }
}

此 if 语句使用正则表达式匹配 ? 后包含 17 个字符(包括第 9 个字符上的 =)的任何 URL。正则表达式“^.{8}=.{8}$”表示:

  • ^ 字符串的开头
  • .{8} 任意 8 个字符
  • = 文字 = 字符
  • .{8} 任意 8 个字符
  • $ 字符串结尾

此配置将把任何具有此模式的 URL 重定向到主页。

请注意,此配置仅在 URL 没有其他查询参数时才有效。如果 URL 有其他查询参数,则需要修改正则表达式以将其考虑在内。

相关内容