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

时间:2019-04-09 22:39:11

标签: php redirect error-handling silverstripe

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

我有一个特定的页面类型“事件”,该事件类型在其特定日期之后未发布。

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

一旦事件通过,该事件将不会发布,因此跟随该链接将导致404错误页面。该链接仍将在静态页面上可用。

我想为“事件”页面类型设置特定的错误页面,以便当某人点击过去事件的链接时,他们将获得错误页面A。“此事件已通过,请转到我们的事件页面”

然后,我想要一个常规错误页面B“找不到页面,请转到我们的主页”,该页面将是该网站上任何其他错误链接的错误页面。

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

1 个答案:

答案 0 :(得分:1)

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

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);
}

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