首页 > 解决方案 > Cakephp - 大写的 URL 生成重复的内容,重定向到小写

问题描述

我正在使用 Cakephp 2.x,我正在尝试将包含大写的 URL 重定向到小写。为了提供有关技术部分的更多信息,它是一个字典,它接受一个参数(字母或单词),然后在数据库中进行搜索,并根据用户的搜索,显示一定的结果。

到目前为止,我所做的是这段代码,以便能够重定向那些用户(比如说,通过他/她自己的判断或错误输入大写字母)的 URL。在这种情况下,直接在插入大写字母时,结果或单词必须自动重定向为小写。

'''

 public function comprobar_param($param, $letter = NULL) {
    $param_is_letter = false;
    $param_is_capital_letter = false;
    $categorias_diccionario = 'abcdefghijklmnopqrstuvwxyz';

    if(strlen($param) > 0) {
        // If it is a lowercase letter
        $pos_lowercase = strpos($categorias_diccionario, $param);
        $pos_lowercase !== false ? true : false;
        $param_is_letter = $pos_lowercase;
        $pos_uppercase = preg_match("/[A-Z]/", $param);

        //if the letter is a capital letter
        $param_is_capital_letter = !$param_is_letter && $pos_uppercase;
    }

    if(empty($this->request->query)){
        $params_url_str = '';
    } else {
        $params_url_str = '?' . http_build_query($this->request->query);
    }


    if($param_is_capital_letter === true) {
       $this->redirect('/' . DICCIONARIO_MEDICO_URL . '/' . strtolower($param). $params_url_str, 301);
    } elseif($param_is_letter === false) {

        if($letter != NULL) {
            $this->redirect('/' . DICCIONARIO_MEDICO_URL . '/' . $param . $params_url_str, 301);
        } else {
            $this->cacheAction = array(
                'comprobar_param' => '1 year'
            );

          $this->view(null, $param);
          $this->render('view');
        }
    // if we are on the list with lowercase
    } else {
        // if the url doesn't end in slash, we redirect the URL with slash at the end
        if(substr($this->params->url, -1) != '/') {
            $this->redirect('/' . DICCIONARIO_MEDICO_URL . '/' . strtolower($param) . '/' . $params_url_str, 301);
            return;
        }
} 

'''

因此,我在 routes.php 文件中使用的路由将是下一个:



Router::connect('/'.DICCIONARIO_MEDICO_URL . '/:param', array('controller' => 'treatments', 'action' => 'comprobar_param'), array('pass' => array('param' => '')));

此时,我可以在本地服务器上进行重定向,但是当我尝试在我的开发服务器上对其进行测试时,重定向功能失败了。我将指出一个示例,以便您了解我想要实现的目标: http://topdoctors.local/diccionario-medico/Aborto => http://topdoctors.local/diccionario-medico/Aborto

任何建议都会受到欢迎。谢谢。

标签: phpregexredirectcakephp

解决方案


推荐阅读