Silverstripe 3:我可以在 silverstripe 中为某些页面类型设置自定义错误页面吗?

Silverstripe 3: Can I set a custom error page in silverstripe for certain page types?

我想知道是否可以在特定于特定页面类型的 silverstripe 上设置自定义 404 页面,而所有其他 404 错误都使用默认页面。

我有一个特定的页面类型 "Events",其中包含在特定日期后未发布的活动页面。

我还有一个静态页面,其中包含一些事件的 links。此页面 url 已发送给成员,因此即使某些事件可能已经过去,他们仍然可以访问该页面。

一旦事件结束,它就会被取消发布,因此遵循 link 将导致 404 错误页面。 link 仍将在静态页面上可用。

我想为事件页面类型设置一个特定的错误页面,这样当有人关注 link 过去的事件时,他们将看到错误页面 A。"this event has passed, go to our events page"

然后我想要一个常规错误页面 B "page not found, go to our home page",它将成为网站上任何其他不正确 link 的错误页面。

有什么办法可以做到这一点吗??我正在使用 silverstripe 3

遇到此问题的任何人的解决方案:

config.yml

RequestHandler:
  extensions:
    - ExpiredEventRedirectExtension

ContentController:
  extensions:
    - ExpiredEventRedirectExtension

ModelAsController:
  extensions:
    - ExpiredEventRedirectExtension

ExpiredEventRedirectExtension.php

public function onBeforeHTTPError404($request)
{
    $urlSegment = $request->param('URLSegment');

    if ($urlSegment == "events") {
        $response = new SS_HTTPResponse();
        $response->redirect("/event-no-longer-available/");
    } 

    throw new SS_HTTPResponse_Exception($response);
}

如果事件已在 "events" EventHolder 页面类型下列出,这会将用户重定向到页面类型 "Page" 的事件不再可用。如果它不是来自此 URL,则常规 404 错误页面将显示