Codeigniter router to pass url segment as $_GET query

余生颓废 提交于 2019-12-25 07:49:42

问题


How can I set codeigniter to route this:

/download/folder/file.ext

to this

/download?path=folder/file.ext

?

I know how to do it using .htaccess , but is it possible in CI only? I tried

$route['download/(:any)'] = "download/index/?path=$1"; 

didn't work ... thanks


回答1:


I urge you to change your perspective of what the CI Router class does (this was the most difficult thing for me in moving from the "rewriting" approach to the "router" approach).

Your question assumes a "rewriting" approach, and here's how it could be handled with an .htaccess file:

RewriteRule ^/download/(.*)$ index.php/download/?path=$1 [L]

Under this approach, you'll have a route to match just the "/download" part, and then you'll use $this->input->get('path') in the controller action.

The "routing" approach keeps the .htaccess file the same, and changes your $routes configuration, as well as how the controller "gets" that information, if you will:

<?php
// config/routes.php change:
$routes['download/(:any)'] = 'download/index/$1';

// controllers/download.php:
class Download extends CI_Controller {
    public function index($folder, $file)
    {
        // if the folder is "flat" (i.e. no subfolders),
        // you can simply use $folder and $file
        var_dump($folder);
        var_dump($file);

        // otherwise, $file is the last segment ("n"),
        // and folder is segments 2 through n
        $segments = $this->uri->segment_array();
        $folder = implode('/', array_slice($segments, 2, -1);
        $file   = end($segments);

        // full path is always $folder and $file appended
        $path = $folder.'/'.$file;
        var_dump($path);
    }
}

This is the approach, so adjust as needed for your specific requirements.

Cheers!



来源:https://stackoverflow.com/questions/9153022/codeigniter-router-to-pass-url-segment-as-get-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!