在客户的网站上有大量重定向到特定页面。此页面需要以某种方式检测请求是直接的(手动输入的URI)还是重定向。
所有重定向都是301重定向。由于SEO规则,需要避免添加指标。 (Google使用单独的值对网址进行索引)
我已经尝试检查所有环境变量,但所有环境变量都是空的(假设是正常的),在这方面内部重定向没有任何不同(我估计)。
检测需要实时进行,因此日志文件不是一个选项。
简而言之,参数通过脚本在cookie中注册,然后301重定向到内容由cookie驱动的页面。当cookie被注册时,当有人重新输入地址栏中的地址时,内容将不会更改回原始内容。
我希望这是有道理的。
上一篇:我在考虑状态代码,但我不确定是否有办法在目标网页上阅读。 (我们已经明确表示它不会起作用)
答案 0 :(得分:5)
根据浏览器和中间代理,可能会发生一些事情。但是,在大多数情况下,你不能依赖任何一件事。状态代码是服务器发送回浏览器的内容,因此您不会在请求中获取这些代码。
您没有说明您要解决的问题或为何这一点很重要。你想解决什么问题?
不要依赖你无法控制的东西,而是将它变成你可以控制的东西。
确保您正在进行正确的重定向。有redirections for permanent and temporary moves as well as other situation。
如果您不需要实时数据,可以从日志文件中找出答案。如果你想弄清楚流量模式,但实时没那么有用,这很方便。
而不是外部重定向,使其成为内部重定向。您可以通过Web服务器的请求周期跟踪它。
在外部重定向上设置cookie,然后在下一个请求中查找它。这不会抓住那些没有设置cookie的人。
将路径信息添加到重定向,或者像Sinan建议的那样查询参数。
答案 1 :(得分:4)
怎么样:
my $cgi = CGI->new;
print $cgi->redirect(
'http://example.com/this/page/that.html?redirect=yes'
);
您使用哪种机制来区分重定向,然后可以查看要查询的查询字符串。当然,这不会阻止用户使用redirect=yes
等标记URL。
您可以尝试使用referer
标头,但这有其自身的问题。
答案 2 :(得分:2)
我认为没有办法做到这一点。我能想象的唯一指标是Referer
header field。但似乎仅在请求是以非HTTP方式启动时才会发送(单击链接,表单提交,元刷新等)。
答案 3 :(得分:1)
灵感来自Brian,我退后一步,看看究竟是什么导致了我的问题。
这个问题可能没有答案,但有一个解决方案可以部分解决问题。 通过使用会话cookie,修改后的内容将仅存在于该特定会话,以便下次再次访问原始内容时。 这并不会改变以下事实:重新输入地址栏中的网址仍会导致网页使用Cookie。
谢谢大家的帮助。
答案 4 :(得分:1)
这是我最近检测重定向并将其作为自定义请求标头公开给应用程序:X-Redirect: 1
(使用Apache的mod_rewrite和mod_headers)。
在源端,我通过在URL路径上添加额外的/redirect
将所有请求重定向到目标服务器:
RewriteRule ^/(.*) http://target-server.com/redirect/$1 [L,R=permanent]
在目标端,我检测到路径中的/redirect
,通过另一个重定向将其剥离,并在响应中注入自定义cookie:
RewriteRule ^/redirect/(.*)$ /$1 [R=permanent,L,CO=redirect:1:target-server.com:86400:/]
同样在目标方面,我将cookie转换为环境变量,“禁用”cookie,然后将env变量转换为自定义请求标头:
RewriteCond %{HTTP_COOKIE} redirect=1 [NC]
RewriteRule ^(.*)$ /$1 [L,CO=redirect:0:target-server.com:86400:/,E=redirect:1]
RequestHeader set X-Redirect 1 env=redirect
答案 5 :(得分:0)
如果请求是重定向,则应该有一个标题指示重定向的位置。