0

在我的一个基于类的网站上,一切都通过index.php页面控制,每个页面都是class通过该索引页面调用的自己的页面。

在其中一个类中包含为站点的每个页面调用的已登录和已注销标题,这两者都调用Ad出现在站点顶部的一个。

问题是,每当页面上有重定向时,它不会发生,直到该页面的类被调用,这发生标题已经被调用之后,这意味着广告调用是为一个广告进行的自从页面以重定向结束以来从未见过。

这会对广告的性能产生负面影响,因为它会降低广告的点击率 (CTR)。

如果在加载该页面的类之前无法知道页面最终重定向,我如何确保在页面最终重定向时不进行广告调用?

我能想到的唯一“开箱即用”解决方案是以某种方式使用输出缓冲区首先加载该页面的类,然后以某种方式将标头附加到缓冲区的开头,如果它到达那一点没有重定向,但我不知道这是否可行,或者你会如何做到这一点。

有任何想法吗?

编辑:

澄清一下,重定向已经通过 HTTP 标头完成,并且所有输出当前都在缓冲。但是,每个页面都可以有自己的重定向原因,这就是它由每个页面控制的原因。例如,一个页面负责发送消息,当发送消息时,它将用户在将消息保存到数据库后重定向回他们的收件箱。在另一个页面上,不允许注销的用户,因此特定页面会检查用户是否已登录,如果没有,则将他们重定向到登录页面。

但是,似乎即使启用了完整的输出缓冲并且重定向是通过各个类页面内的 header() 函数完成的,缓冲仍然会在运行标题重定向之前进行 Ad 调用。

4

1 回答 1

0

重定向必须发生在 HTTP 标头中,而不是使用 HTML 元标记或 Javascript 技巧或类似方法。HTTP 标头需要在其他任何内容之前输出。正因为如此,并且仅仅因为它有意义,您的应用程序应该在尝试输出任何 HTML 之前决定是否要重定向用户。因此,应该完全没有问题。

如果您当前的应用程序逻辑在决定重定向用户之前输出或准备 HTML(触发广告),那么您的应用程序结构就很糟糕。更改。它应该像这样工作:

...

if ($userNeedsToBeRedirected) {
    header('Location: http://example.com/other/url');
    exit;
}

// output HTML and ads here
// never triggered on a redirect
于 2012-11-26T13:45:06.867 回答