Допустим, у меня есть эти URL-адреса на моем веб-сайте.
http://www.example.com/locations
http://www.example.com/locations/Сидней
http://www.example.com/locations/брисбен
http://www.example.com/locations/перт
http://www.example.com/services/
http://www.example.com/services/cars
http://www.example.com/services/truck
http://www.example.com/services/phone
http://www.example.com/blog/display/blog-title
http://www.example.com/blog/display/blog-title2
http://www.example.com/blog/display/blog-title3
http://www.example.com/blog/display/blog-title4
я хочу, чтобы URL-адреса были такими
http://www.example.com/locations
http://www.example.com/brisbane
http://www.example.com/services/
http://www.example.com/грузовик
http://www.example.com/название блога
http://www.example.com/blog-title2
http://www.example.com/blog-title3
http://www.example.com/blog-title4
как добиться этого в codeigniter??
Я пробовал ниже код:
$route[''] = 'blog/index';
$route['(:num)'] = 'blog/index/$1';
$route['(:any)'] = 'blog/display/$1';
$route['home/(:any)'] = 'blog/display/$1';
но проблема в том, что работа только для блогов не может использовать тот же код для других, и это делает другие ссылки неработающими.
поэтому я попытался ответить @ACD, он дал 2 ошибки 1. Неопределенное свойство: CI_Router::$load 2. Вызов библиотеки функций-членов() при нулевом значении
поэтому я сделал некоторые изменения, как это
$req = $this->uri->segment(1);
require_once ( BASEPATH. 'database/DB.php');
$db =& DB();
if ($db->get_where('home_inner_tbl', array('page_url' => $req))) {
$route['(:any)'] = 'home/display/$1';
} elseif ($db->get_where('blog_tbl', array('page_url' => $req))) {
$route['(:any)'] = 'blog/blog_display/$1';
} elseif ($db->get_where('towing_services_tbl', array('page_url' => $req))) {
$route['(:any)'] = 'towing-services/display/$1';
} elseif ($db->get_where('special_services_tbl', array('page_url' => $req))) {
$route['(:any)'] = 'cash-for-cars/display/$1';
} elseif ($db->get_where('locations_tbl', array('page_url' => $req))) {
$route['(:any)'] = 'locations/display/$1';
}
С этим кодом он не выдал ошибку, а только первую строку оператора if, которая работает, а именно $route['(:any)'] = 'home/display/$1'; другие ссылки, такие как locatins, услуги буксировки, блог, наличные за автомобили, не работают.
Что-то не так с оператором if? потому что похоже, что этот ответ должен быть правильным.
Кстати, мой контроллер выглядит так
class Home extends CI_Controller
{
public function index() {
// some code in here
}
public function display($page_url) {
// some code in here
}
}
Тот же самый контроллер отправляется в другие места (местоположения, блог, буксировка_сервисов и т. д.)
как видите, я вызываю $page_url из базы данных.
Кто-нибудь может помочь мне с этим?? Спасибо





Вы можете сначала отфильтровать, какой маршрут выбрать, прежде чем создавать маршрут, если запрос существует, предполагая, что запрос URL-адреса может быть получен в базе данных (или изменить его на любую меру, которую вы принимаете, чтобы узнать, существует ли он в определенной категории):
$req = $this->uri->segment(1);
if ($this->db->get_where('locations_table', array('name' => $req))) {
$route['(:any)'] = 'locations/$1';
} else if ($this->db->get_where('blogs_table', array('name' => $req))) {
$route['(:any)'] = 'blog/display/$1';
} else if ($this->db->get_where('services_table', array('name' => $req))) {
$route['(:any)'] = 'services/$1';
}
К вашему сведению: это невозможно сделать с помощью htaccess, если нет определенного формата для каждой категории (пример: для местоположения — loc_singapore, loc_usa; для услуг — svc_someservice и т. д.)
Привет, я попробовал ваш код, он дает мне 2 ошибки 1. Неопределенное свойство: CI_Router::$load 2. Вызов библиотеки функций-членов () на null Я написал ваш код в route.php, это правильное место для его записи ? кажется, он не понимает части $this->db->get_where. Итак, я попытался $this->load->library('database'); но тоже не работал. Любое предложение??. Кажется, вы очень хорошо поняли мой вопрос, не могли бы вы мне помочь, пожалуйста?