CodeIgniter自定义URI路由

时间:2015-05-26 06:53:54

标签: php codeigniter url permalinks

我想在CodeIgniter上创建自定义永久链接,实际上我买了脚本但开发人员因为一些冷漠而离开了该项目。所以现在问题是我不知道如何更改该脚本的永久链接。主要永久链接问题是当我在搜索栏上搜索任何内容时,我会收到此网址:

  

domain.com/?s=xxxxx%20yyyyy

而不是我想要这个url结构:

  

domain.com/search/xxxxxx-yyyyy /

应用/配置/ routes.php文件

$route['default_controller']    = "music";

$route['404_override']          = '';

$route['search/(:any)']         = "music/index/$0/$1/$2";

$route['search/music/(:any)']   = "music/$1";

1 个答案:

答案 0 :(得分:0)

我想你要求的是不可能(直接) 假设你的表格是,

<form action="" method="GET">
    <input type="text" name="s" value="" placeholder="Search music..." />
</form>

由于该方法为GET,因此默认功能是将URL中的参数添加为查询字符串。

根据规范(RFC1866,第46页; HTML 4.x第17.13.3节)声明:

  

如果方法是“get”并且操作是HTTP URI,则用户代理获取action的值,附加“?”然后,使用“application / x-www-form-urlencoded”内容类型附加表单数据集。


所以,基本上你可以在这里做的是对此应用 hack 。应用搜索时,将用户重定向到所需的网址。你可以这样做,

控制器 (controllers / music.php)

<?php
class Music extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('xyz_model');
    }

    public function index()
    {
        if($this->input->get('s'))
        {
             $s = $this->input->get('s');
             redirect('/search/'$s);
        }

        $this->load->view('home.php');
    }


    public function search()
    {
        $s = $this->uri->segment(2);

        /*
        Now you got your search parameter.
        Search in your models and display the results.
       */

       $data['search_results'] = $this->xyz_model->get_search($s);
       $this->load->view('search_results.php', $data);
    }
}