2009-07-24 101 views
2

在客户的网站上有大量重定向到特定页面。这个页面需要以某种方式检测请求是否是直接的(手动输入URI)或重定向。如何通过重定向检测页面是否被请求?

  1. 所有重定向都是301重定向。由于SEO规则增加了指标需要避免。 (谷歌索引单独的值url)

  2. 我试过检查所有的环境变量,但它们都是空的(这是正常的),在这方面内部重定向没有任何不同(我认为)。

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

短的过程,参数通过脚本注册的饼干,然后将其301重定向到内容的cookie驱动的页面。当cookie被注册时,当有人在地址栏中重新输入地址时,内容不会变回原始状态。

我希望这是有道理的。

PREVIOUSLY:我在考虑状态码,但我不确定是否有方法在目标页面上读取它。 (我们已经明确表示它不起作用)

+1

这与Web服务器发送给客户端的状态码无关。客户端请求作为重定向目标的页面时,代码已消失。 – 2009-07-24 15:29:34

+0

是的。我担心你会这么说。 :) – 2009-07-24 17:12:33

回答

1

受到Brian的启发,我退后一步,看看究竟是什么导致了我的问题。

可能没有回答这个问题,但存在着部分解决问题的解决方案。 通过使用会话cookie,修改后的内容将仅存在于该特定会话中,以便下次再次访问原始内容。 这并没有改变这个事实,即重新输入地址栏中的网址仍然会导致页面使用cookie。

谢谢大家的努力帮助。

0

如果请求是重定向,应该有一个标题指示它从哪里重定向。

+0

我也这么认为。但我似乎找不到解决办法。在这种情况下HTTP_REFERER不显示。 – 2009-07-24 17:18:10

+2

“应该”是一个强词。 HTTP规范没有说“应该”。可能有一个标题,但它不是一个要求,甚至是一个建议。 – 2009-07-24 17:19:23

3

如何:

my $cgi = CGI->new; 

print $cgi->redirect(
    'http://example.com/this/page/that.html?redirect=yes' 
); 

您使用区分之间的重定向可以再看看查询字符串来决定什么都机制。当然,这并不妨碍用户将网址加上redirect=yes等。

您可以尝试referer标题,但这有其自身的问题。

+0

当然,如果他们可以更新所有的请求来包含一个有用的已知查询字符串,但正如您所指出的那样,如果用户将该URL标记为更糟糕的URL,还是会链接到它,那么您需要检查其他信息(例如引用信息 - 并检查内容不只是它存在) – 2009-07-24 16:43:42

0

我不认为有办法做到这一点。我能想象的唯一指标是Referer header field。但它似乎只在请求是以非HTTP方式启动(单击链接,表单提交,元刷新等)时才会发送。

4

根据浏览器和中间代理的不同,可能会发生几件事情。但是,在大多数情况下,你不能依赖任何一件事情。状态码是服务器发回给浏览器的东西,所以你不会在请求中获得这些信息。

你不说你想解决什么问题或为什么这个位很重要。你想解决什么问题?

不要依赖你不能控制的东西,把它变成你可以控制的东西。

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

  2. 如果您不需要实时数据,您可以从日志文件中找出数据。如果您试图找出交通模式,这很方便,但实时并不那么有用。

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

  4. 设置在外部重定向一个cookie,然后寻找它的下一个请求。这不会吸引那些不设置cookies的人。

  5. 添加路径信息,以重定向,或作为思南建议也许查询参数。

1

这是我最近做的检测重定向并将其公开为应用程序的自定义请求标头:X-Redirect: 1(使用Apache的mod_rewrite和mod_headers)。

在源极侧,我通过预先计算的附加/redirect到URL路径重定向到目标服务器的所有请求:

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变量转换为定制的热曲est头:

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 
相关问题