在我的访问日志中,我随机得到了很多查询字符串,它们是这样的
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 有其他查询参数,则需要修改正则表达式以将其考虑在内。