Nginx判断来源(来路)
在 Nginx 中,你可以使用$http_referer变量来判断请求的来源(来路),并进行相应的跳转。$http_referer变量包含了请求的来源页面的 URL。
以下是一个示例配置,演示如何使用 Nginx 判断来路并进行跳转:
location / { # 检查来路是否为特定的来源 if ($http_referer ~* "example.com") { # 来自 example.com 的请求将被重定向到另一个地址 return 301 https://www.360baiduseo.com$request_uri; } }
在if语句中,我们使用正则表达式匹配$http_referer,如果来路是example.com,则通过return语句将请求重定向到https://360baiduseo.com。如果没有匹配到特定的来源,Nginx 将允许正常访问。
需要注意的是,使用if语句可能会对性能产生一些影响,因此在实际使用时,建议根据需求进行优化。另外,Nginx 还支持更多的条件判断和重定向选项,你可以根据具体情况进行配置。
搜索引擎来路跳转
下面是根据搜索引擎来路判断跳转代码:
# 保留原程序的伪静态规则: if (!-e $request_filename){ rewrite ^/html/(.*)$ /index.php?$1 last; } #判断搜索引擎来路跳转开始: location / { if ($http_referer ~* "baidu.com|sogou.com|so.com|sm.cn|bing.com|toutiao.com") { rewrite ".*" https://www.360baiduseo.com/; } }
通过上面的代码大不知到大家有没有发现,有时蜘蛛的来路也是搜索引擎,比如Baiduspider的referer是www.baidu.com,那么怎么可以让用户跳转,蜘蛛却不跳转呢?
Nginx判断蜘蛛
location / { if ($http_user_agent ~* "Baiduspider|360Spider|bingbot|Googlebot|Sogou web spider|spider") { rewrite ^/html/(.*)$ /index.php?$1 last; } }
Nginx中if语句里的AND/&&/OR 多重判断
if (来路==搜索引擎 and 是蜘蛛){ rewrite ^/html/(.*)$ /index.php?$1 last; }
nginx 语句中是不存在 and 的那么如何实现呢?
自用跳转代码分享(带搜索引擎来路访客记录)
下面是我自用的Nginx跳转代码,分享给大家:
首先在配置文件中添加一行,作用是为日志文件设置格式:
log_format custom_format '访客IP:$remote_addr|日期:$remote_user [$time_local] |访问的域名:"$host"|来路:"$http_referer"|请求头:"$http_user_agent"';
在网站中创建文件夹access,用来存放访客记录
然后上跳转代码,放入伪静态中:
# 定义一个自定义变量来格式化日期 set $formatted_date ""; # 配置格式化日期的规则 YY-MM-DD set_by_lua_block $formatted_date { local iso8601_time = ngx.var.time_iso8601 local year, month, day, hour, minute, second = iso8601_time:match("(%d%d%d%d)-(%d%d)-(%d%d)T(%d%d):(%d%d):(%d%d)") return year .. "-" .. month .. "-" .. day } if (!-e $request_filename){ rewrite ^/html/(.*)$ /index.php?$1 last; } location / { set $should_redirect 0; if ($http_user_agent ~* "Baiduspider|360Spider|bingbot|Googlebot|Sogou web spider|spider") { set $should_redirect "${should_redirect}1"; } if ($http_referer ~* "baidu.com|sogou.com|so.com|sm.cn|bing.com|toutiao.com") { set $should_redirect "${should_redirect}2"; } if ($should_redirect = 012){ rewrite ^/html/(.*)$ /index.php?$1 last; } if ($should_redirect = 01){ rewrite ^/html/(.*)$ /index.php?$1 last; } if ($should_redirect = 02){ access_log /www/wwwroot/360baiduseo.com/access/$formatted_date-access.log custom_format; rewrite ".*" https://www.360baiduseo.com/; } }
我使用的是$should_redirect
变量来根据不同条件指示是否进行重定向。access.log 为访客记录日志