Как заменить символы подчеркивания на 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-адреса, заменяя символы подчеркивания штрихами ???

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

 config/routes.php 

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

Просто

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

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

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

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

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

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

     <?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'] = FALSE; 

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

$route['translate_uri_dashes'] = FALSE;

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

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

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

 $route['translate_uri_dashes'] = TRUE; 

Это вам нужно.

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

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

Взгляните на пользовательскую маршрутизацию Codeigniter http://codeigniter.com/user_guide/general/routing.html

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

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

 /* * 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']); } с /* * 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 в application / 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); } } 

Вы можете использовать этот метод _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(); } 

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

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

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