我有一个扩展 ErrorPage 和 ErrorPage_Controller 的“智能错误页面”类,基本上它的作用是 a) 检测它是否是 404,然后 b) 尝试根据一些自定义搜索逻辑定位潜在的重定向页面。如果在其他地方找到该页面,则用户将自动重定向到该位置。我知道 SilverStripe 已经有一个基于重命名/移动的 SiteTree 元素的基本版本,但是这是更高级的。
无论如何,从 3.1 开始,似乎不可能覆盖发送的 404 标头(尽管这在 3.0 中工作得很好)。
class IntelligentErrorPage_Controller extends ErrorPage_Controller {
public function init() {
parent::init();
$errorcode = $this->failover->ErrorCode ? $this->failover->ErrorCode : 404;
if ($errorcode == 404) {
... some search logic ...
if ($RedirectSiteTreePage)
return $this->redirect($RedirectSiteTreePage->Link());
}
}
}
从 3.1 开始,上面返回“HTTP/1.1 404 Not Found”以及“Location: [url]”标头 - 但是似乎无法覆盖 404 状态。
知道如何恢复预期的“HTTP/1.1 302 Found”标头吗?
PS:我试过 $this->getResponse()->setStatusCode(302) 等也没有运气。