Laravel重定向旧链接

时间:2017-04-12 16:46:37

标签: laravel redirect hyperlink

我遇到了一个问题:需要将许多损坏的链接重定向到新目标。目前所有旧链接都指向默认的404页面,但这不是一个选项。

我想创建一个Controller,我将在其中定义重定向规则。

不幸的是,我不知道如何捕获所有断开的链接以指向我的新控制器。

我已经做了你建议的更正,但不幸的是在重定向后我得到了错误500. $ redirect_url是正确的,我已经检查了。

这是新的模型功能:

// connect to DB
$GLOBALS['default_db'] = new DB('localhost','db_name','username','password') ;

// Get users and output results
$query = new DBQuery('SELECT * FROM users WHERE userid = ?',array(10)) ;
var_dump($query -> results()) ;
var_dump($query -> num_rows()) ;

// DB connection
class DB {

    public $connection;

    public function __construct($host , $dbname , $username , $password) {
        $this->connection = new \PDO('mysql:host=' . $host . ';dbname=' . $dbname , $username , $password);
    }

}

// Wrapper
class DBQuery {

    private $num_rows = 0;
    private $results  = array();

    public function __construct($query , $params = null , $class_name = null , DB $db = null) {

        if ( is_null($db) ) {
            $db = $GLOBALS['default_db'];
        }

        $statement = $db->connection->prepare($query);
        $statement->execute($params);

        $errors = $statement->errorInfo();
        if ( $errors[2] ) {
            throw new \Exception($errors[2]);
        }

        $fetch_style = ($class_name ? \PDO::FETCH_CLASS : \PDO::FETCH_OBJ);
        $this->results = $class_name ? $statement->fetchAll($fetch_style , $class_name) : $statement->fetchAll($fetch_style);
        $this->num_rows += $statement->rowCount();

        while ( $statement->nextrowset() ) {
            $this->results = array_merge($this->results,$class_name ? $statement->fetchAll($fetch_style , $class_name) : $statement->fetchAll($fetch_style));
            $this->num_rows += $statement->rowCount();
        }
    }

    public function num_rows() {
        return $this->num_rows;
    }

    public function results() {
        return $this->results;
    }

}

并在Handler.php中:

public function redirect($url) {

    $redirect_url = '';
    if(preg_match('!/bukmeikari/(.*)/(.*).html!isU', $url, $matches)) {
        $redirect_url = str_replace('/bukmeikari/', '/bg/bukmeikari/', $url);
    }
    if($redirect_url != '') {
        Redirect::to($redirect_url, 301);
    }
}

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用render课程的App\Exceptions\Handler方法来完成您的任务。

来自文档:

  

render方法负责将给定的异常转换为   应该发送回浏览器的HTTP响应。默认情况下,   异常传递给生成响应的基类   为了你。但是,您可以自由检查异常类型或返回   你自己的自定义回复

Docs