![如何在 Nginx 中重定向包含随机字符串的 URL](https://linux22.com/image/782915/%E5%A6%82%E4%BD%95%E5%9C%A8%20Nginx%20%E4%B8%AD%E9%87%8D%E5%AE%9A%E5%90%91%E5%8C%85%E5%90%AB%E9%9A%8F%E6%9C%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%20URL.png)
在我的访问日志中,我随机得到了很多查询字符串,它们是这样的
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 有其他查询参数,则需要修改正则表达式以将其考虑在内。