如何在 cakephp 中发送 410 gone 2.x
How to send a 410 gone in cakephp 2.x
我想向服务器发送一个 410 gone 响应,用于我在 CakePHP 中未发布的旧 URLs。
CakePHP 提供了各种异常,如 404、500 等,但没有像 410 这样的异常。
如果有人打开网站上不再存在但曾经存在的旧 URL,我有什么办法可以让服务器 410 消失响应。
谢谢,
首选方式是抛出异常。扩展 HttpException 的异常。您还可以从此 class 扩展并创建您自己的自定义异常。
https://github.com/cakephp/cakephp/blob/3.0.11/src/Network/Exception/BadRequestException.php
<?php
use Cake\Network\Exception\HttpException;
class GoneException extends HttpException
{
/**
* Constructor
*
* @param string $message If no message is given 'Gone' will be the message
* @param int $code Status code, defaults to 410
*/
public function __construct($message = null, $code = 410)
{
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
}
我做了以下事情来解决这个问题。
我在"AppExceptionRenderer"中添加了"gone"函数
public function gone($error) {
$this->controller->layout = 'nopageexists';
$this->controller->set('title_for_layout', __('example.com: Page not found'));
$this->controller->set('meta_description', '' );
$this->controller->set('meta_keywords', '');
// This will execute 404 Error Page without redirection added by vinod...
$this->controller->response->statusCode(410);
$this->controller->render('/Errors/error404');
$this->controller->response->send();
}
在 app/Lib/myException 中创建了自定义 class。php
class GoneException extends CakeException {
/**
* Constructor
*
* @param string $message If no message is given 'Not Found' will be the message
* @param integer $code Status code, defaults to 410
*/
/*
public function __construct($message = null, $code = 410) {
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
*/
protected $_messageTemplate = 'Test';
}
在我想显示 410 消失的控制器下面添加。
throw new GoneException('Gone', 410);
这对我有用。
我想向服务器发送一个 410 gone 响应,用于我在 CakePHP 中未发布的旧 URLs。
CakePHP 提供了各种异常,如 404、500 等,但没有像 410 这样的异常。
如果有人打开网站上不再存在但曾经存在的旧 URL,我有什么办法可以让服务器 410 消失响应。
谢谢,
首选方式是抛出异常。扩展 HttpException 的异常。您还可以从此 class 扩展并创建您自己的自定义异常。
https://github.com/cakephp/cakephp/blob/3.0.11/src/Network/Exception/BadRequestException.php
<?php
use Cake\Network\Exception\HttpException;
class GoneException extends HttpException
{
/**
* Constructor
*
* @param string $message If no message is given 'Gone' will be the message
* @param int $code Status code, defaults to 410
*/
public function __construct($message = null, $code = 410)
{
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
}
我做了以下事情来解决这个问题。
我在"AppExceptionRenderer"中添加了"gone"函数
public function gone($error) {
$this->controller->layout = 'nopageexists';
$this->controller->set('title_for_layout', __('example.com: Page not found'));
$this->controller->set('meta_description', '' );
$this->controller->set('meta_keywords', '');
// This will execute 404 Error Page without redirection added by vinod...
$this->controller->response->statusCode(410);
$this->controller->render('/Errors/error404');
$this->controller->response->send();
}
在 app/Lib/myException 中创建了自定义 class。php
class GoneException extends CakeException {
/**
* Constructor
*
* @param string $message If no message is given 'Not Found' will be the message
* @param integer $code Status code, defaults to 410
*/
/*
public function __construct($message = null, $code = 410) {
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
*/
protected $_messageTemplate = 'Test';
}
在我想显示 410 消失的控制器下面添加。
throw new GoneException('Gone', 410);
这对我有用。