Перезапись Codeigniter .htaccess для базы данных

0

У меня возникают трудности с Codeigniter. Я пытаюсь получить данные из данных MySQL, передав ID записи как часть URL-адреса

URL должен быть

локальный /site_folder/страница /page_title/2

В приведенном выше URL-адресе отображается имя контроллера, а 2 - первичный идентификатор записи в базе данных (это может быть любое число от 1 до 9999).

Мой контроллер включает в себя следующее:

public function index()
{
    $this->load->helper('url');
    $this->load->model('pages_model');

    $id = $this->uri->segment(3,1);
    if (empty($id))
    {
        show_404();
    }

    $data['page'] = $this->pages_model->get_page($id);
    $this->load->view('page',$data);
}

Мой.htaccess содержит это

    RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Когда я вхожу в localhost/site_folder/page/page_title/2 в адресную строку, он выдает 404.
Тем не менее, когда я вхожу в localhost/site_folder/page он показывает запись базы данных по умолчанию, как показано во втором значении segment(3,1) выше.

Итак, как мне изменить файл.htaccess для работоспособного переписывания?
Я пробовал следующее, но никто не работал для меня:

  • RewriteRule. * Page/$ 0 [PT, L]
  • RewriteRule. * Page/(*.)/$ 0 [PT, L]
  • RewriteRule. * Page/(?*.)/$ [PT, L]
  • 0
    Еще одна проблема, связанная с индексом «параметры», вы должны понимать, что этот URL ufo.com/page/1 требует контроллера «страница» и метода «1», никакое правило перезаписи не поможет вам, пожалуйста, посмотрите этот вопрос / ответ
  • 1
    @Kyslik: Спасибо. Я изменил URL на localhost / ci / page / index / 1, и он работает нормально
Теги:
codeigniter
.htaccess

1 ответ

0
Лучший ответ

Вы можете попробовать использовать функцию _remap как описано в документации CI. Https://ellislab.com/codeigniter/user-guide/general/controllers.html

Функция _remap если она существует в контроллере, представляет собой функцию, которая вызывается перед любым методом класса, и в этой функции вы можете проверить параметры, отправленные в функцию, и в соответствии с этим вызовом использовать любой метод контроллера.

Для вашего примера, поскольку я предполагаю, что page_title является динамическим, вы можете либо установить регулярное выражение для его проверки, либо, как в следующем примере, проверить, не существует ли метода, а затем рассматривать его как заголовок страницы (это означает, что вы должны быть уверены, что не быть заголовком страницы и именем метода в этом контроллере с тем же именем)

public function _remap($method, $params = array())
{
    if (!method_exists($this, $method))
    {   
        // assume this is a page_title and run the index method

        $this->index($method, $params);     
    }
    else {
        // means that method exists then run that method
        $this->$method( $params);
    }

}

Также помните, что это означает, что вы должны учитывать при использовании метода индексного заголовка 404, когда кто-то просто набирает случайную строку, которую контроллер будет рассматривать как page_title.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню