如何通过重定向检测页面是否被请求?

时间:2009-07-24 15:25:19

标签: http redirect header

在客户的网站上有大量重定向到特定页面。此页面需要以某种方式检测请求是直接的(手动输入的URI)还是重定向。

  1. 所有重定向都是301重定向。由于SEO规则,需要避免添加指标。 (Google使用单独的值对网址进行索引)

  2. 我已经尝试检查所有环境变量,但所有环境变量都是空的(假设是正常的),在这方面内部重定向没有任何不同(我估计)。

  3. 检测需要实时进行,因此日志文件不是一个选项。

  4. 简而言之,参数通过脚本在cookie中注册,然后301重定向到内容由cookie驱动的页面。当cookie被注册时,当有人重新输入地址栏中的地址时,内容将不会更改回原始内容。

    我希望这是有道理的。

    上一篇:我在考虑状态代码,但我不确定是否有办法在目标网页上阅读。 (我们已经明确表示它不会起作用)

6 个答案:

答案 0 :(得分:5)

根据浏览器和中间代理,可能会发生一些事情。但是,在大多数情况下,你不能依赖任何一件事。状态代码是服务器发送回浏览器的内容,因此您不会在请求中获取这些代码。

您没有说明您要解决的问题或为何这一点很重要。你想解决什么问题?

不要依赖你无法控制的东西,而是将它变成你可以控制的东西。

  1. 确保您正在进行正确的重定向。有redirections for permanent and temporary moves as well as other situation

  2. 如果您不需要实时数据,可以从日志文件中找出答案。如果你想弄清楚流量模式,但实时没那么有用,这很方便。

  3. 而不是外部重定向,使其成为内部重定向。您可以通过Web服务器的请求周期跟踪它。

  4. 在外部重定向上设置cookie,然后在下一个请求中查找它。这不会抓住那些没有设置cookie的人。

  5. 将路径信息添加到重定向,或者像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)

如果请求是重定向,则应该有一个标题指示重定向的位置。