Подтвердить что ты не робот

Как заменить символы подчеркивания на codeigniter url тире?

Я хотел бы узнать простейшее решение для изменения подчеркивания моих кодовых символов для тире по соображениям SEO.

Мои контроллеры выглядят так:

public function request_guide() {
...Load view etc...
}

Итак, чтобы перейти к этой странице, мне нужно было бы перейти к:

www.domain.com/request_guide

Но я хочу быть более ориентированным на SEO и использовать тире вместо подчеркиваний, например:

www.domain.com/request-guide

У меня создается впечатление, что функции codeigniter требуют подчеркивания (возможно, ошибочные).

В предыдущих проектах я просто использовал mod_rewrite, но считаю, что эти действия могут быть выполнены с использованием маршрутов.

Что является самым простым способом для меня переписать URL-адреса, заменяя символы подчеркивания штрихами?

4b9b3361

Ответ 1

Конфигурация маршрутов, найденная в

config/routes.php

ваш друг здесь.

Простой

$route['request-guide'] = "request_guide" ;

сделает это за вас.

Ответ 2

Это действительно зависит от вашего намерения. Если вы просто хотите изменить только одну страницу, то решение devrooms является идеальным:

$route['request-guide'] = "request_guide";

Но если вы хотите сделать это своим поведением по умолчанию, вы должны расширить свой основной класс Router следующим образом (source: [Использование дефиса вместо подчеркивания в CodeIgniter ])

  • Создайте новый файл в 'application/core' и назовите его 'MY_Router.php'
  • Вставьте в него этот код:

    <?php
    
    defined('BASEPATH') || exit('No direct script access allowed');
    
    class MY_Router extends CI_Router {
    
        function _set_request ($seg = array())
        {
            // The str_replace() below goes through all our segments
            // and replaces the hyphens with underscores making it
            // possible to use hyphens in controllers, folder names and
            // function names
            parent::_set_request(str_replace('-', '_', $seg));
        }
    
    }
    
    ?>
    

ОБНОВЛЕНИЕ (26 октября 2015 г.). В CodeIgniter 3 есть лучший способ сделать это, поскольку @Thomas Wood упомянул:

$route['translate_uri_dashes'] = TRUE;

Ответ 3

Код Ignitor 3 имеет это встроенное значение:

$route['translate_uri_dashes'] = FALSE;

Просто измените на TRUE, и вы можете использовать либо _, либо -.

Документация

Ответ 4

Откройте приложение /config/routes.php и измените

$route['translate_uri_dashes'] = TRUE;

Это вам нужно сделать.

Теперь, когда вы обращаетесь к www.domain.com/request-guide, он будет создавать экземпляр контроллера request_guide.

Он будет работать со всеми контроллерами с именем, содержащим _ (подчеркивание).

Ответ 6

$route['request-guide'] = "request_guide";

Ответ 7

Что вы можете сделать, так это создать пользовательский крючок (PST... вам нужны базовые навыки CodeIgniter): для получения дополнительной информации о CodeIgniter Крючки - расширение основного ядра  

/*
 * the hooks must be enabled from the config file
 * replace underscore with dashes (hyphens) for SEO
 */

function prettyurls() {
    if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') {
        $newkey = str_replace('-', '_', key($_GET));
        $_GET[$newkey] = $_GET[key($_GET)];
        unset($_GET[key($_GET)]);
    }
    if (isset($_SERVER['PATH_INFO']))
        $_SERVER['PATH_INFO'] = str_replace('-', '_', $_SERVER['PATH_INFO']);
    if (isset($_SERVER['QUERY_STRING']))
        $_SERVER['QUERY_STRING'] = str_replace('-', '_', $_SERVER['QUERY_STRING']);
    if (isset($_SERVER['ORIG_PATH_INFO']))
        $_SERVER['ORIG_PATH_INFO'] = str_replace('-', '_', $_SERVER['ORIG_PATH_INFO']);
    if (isset($_SERVER['REQUEST_URI']))
        $_SERVER['REQUEST_URI'] = str_replace('-', '_', $_SERVER['REQUEST_URI']);
}

Я назвал файл customhooks.php.

Затем добавьте это в файл hooks.php в приложении /config :

$hook['pre_system'] = array(
    'class' => '',
    'function' => 'prettyurls',
    'filename' => 'customhooks.php',
    'filepath' => 'hooks',
    'params' => array()
);

Вам нужно будет отредактировать файл application/config/config.php, чтобы включить hooks

$config['enable_hooks'] = TRUE;

EXTRA

так что, когда вы используете $this- > uri- > uri_string(), он остается в переносе, сделайте следующее Создание основных системных классов

class MY_URI extends CI_URI {

    function uri_string() {
        return str_replace('_', '-', $this->uri_string);
    }

}

Ответ 8

Вы можете использовать этот метод _remap() для обработки такого поведения. Поместите этот метод в свои контроллеры или создайте основной контроллер и поместите его.

public function _remap($method, $params = array()){
    if(method_exists($this, $method)){
        return call_user_func_array(array($this, $method), $params);
    }else{
        $method = str_replace("-", "_", $method);
        if(method_exists($this, $method)){
            return call_user_func_array(array($this, $method), $params);
        }
    }
    show_404();
}

Ответ 9

goto system\core\Router.php и следующее в функции _set_request как первая строка

$segment = str_replace ('-', '_', $сегменты);

это заменит все '-' в url на '_', чтобы вы могли включить '-' в свой url, создав контроллеры с помощью '_'