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

问题描述 投票:3回答:1

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

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

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

一旦事件通过,它就会被取消发布,因此在链接后会出现404错误页面。该链接仍可在静态页面上使用。

我想为事件页面类型设置一个特定的错误页面,这样当有人跟踪过去事件的链接时,他们将收到错误页面A.“此事件已经过去,请转到我们的事件页面”

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

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

php redirect error-handling silverstripe
1个回答
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);
}

如果事件已列在“events”EventHolder页面类型下方,则会将用户重定向到event-no-available-available,其页面类型为“Page”。如果它不是来自此URL,则会显示常规的404错误页面

© www.soinside.com 2019 - 2024. All rights reserved.