Codeigniter查询字符串URL问题

时间:2018-12-14 12:08:14

标签: php codeigniter query-string clean-urls

我已经设置了具有如下网址的项目。

index.php?c=controllerName&m=methodName

上面的网址中的参数如下所示。

index.php?c=controllerName&m=methodName&selDeg=manager

我想对新创建的模块使用如下所示的url。

admin/Items/1

但是要像以前开发的模块一样使用第一类网址。

是否可以对旧模块使用带有index.php的url,而对于新模块则不使用index.php

1 个答案:

答案 0 :(得分:1)

您可以像这样准备您的配置:

$config['base_url'] = 'your_base_url';
$config['index_page'] = ''; // empty string
$config['enable_query_strings'] = FALSE; // keep it to default FALSE, you can use it even without enabling it here

和您的.htaccess如下:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

我想就是这样,现在您可以像这样使用segmentsquery_strings

http://localhost/codeigniter/?c=welcome&m=index
http://localhost/codeigniter/welcome/index
http://localhost/codeigniter/index.php/welcome/index
http://localhost/codeigniter/index.php?c=welcome&m=index
http://localhost/codeigniter/index.php/?c=welcome&m=index

我已经在我的环境中进行了测试,并且工作正常。


编辑:在我的代码点火器模板中,我扩展了核心路由器,并稍微更改了_set_routing()方法,如下所示:

当然,更改核心系统是一个坏习惯,因此您需要扩展核心路由器文件并在MY_Router.php下创建application/core并使其扩展CI_Router,如下所示:

class MY_Router extends CI_Router
{
protected function _set_routing()
{
    if (file_exists(APPPATH.'config/routes.php'))
    {
        include(APPPATH.'config/routes.php');
    }

    if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/routes.php'))
    {
        include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
    }

    if (isset($route) && is_array($route))
    {
        isset($route['default_controller']) && $this->default_controller = $route['default_controller'];
        isset($route['translate_uri_dashes']) && $this->translate_uri_dashes = $route['translate_uri_dashes'];
        unset($route['default_controller'], $route['translate_uri_dashes']);
        $this->routes = $route;
    }

    $_c = trim($this->config->item('controller_trigger'));
    if ( ! empty($_GET[$_c]))
    {
        $this->uri->filter_uri($_GET[$_c]);
        $this->set_class($_GET[$_c]);

        $_f = trim($this->config->item('function_trigger'));
        if ( ! empty($_GET[$_f]))
        {
            $this->uri->filter_uri($_GET[$_f]);
            $this->set_method($_GET[$_f]);
        }

        $this->uri->rsegments = array(
            1 => $this->class,
            2 => $this->method
        );
    }
    else
    {
        if ($this->uri->uri_string !== '')
        {
            $this->_parse_routes();
        }
        else
        {
            $this->_set_default_controller();
        }
    }
}
}

现在,您拥有两全其美的优势,您将保持其细分受众群的优势,但始终会寻找get c=&m=,我希望它足够清晰。

我们将所有内容都保留为默认设置,并使其与c一样使用menable_query_strings检查获取请求,但没有启用它并且弄乱了所有内容以继续使用段就这样。