代码之家  ›  专栏  ›  技术社区  ›  Yogendrasinh

Codeigniter查询字符串URL问题

  •  2
  • Yogendrasinh  · 技术社区  · 7 年前

    index.php?c=controllerName&m=methodName

    和上面url中的参数,如下所示。

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

    admin/Items/1

    但我们希望使用第一种类型的url,因为它适用于以前开发的模块。

    是否可以将url与一起使用 index.php 对于旧模块和不带 index.php

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sherif Salah    7 年前

    您可以这样准备配置:

    $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]
    

    segments query_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
    

    我已经在我的环境中进行了测试,效果很好。


    编辑 :在我的codeigniter模板中,我扩展了我的核心路由器,并对 _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();
            }
        }
    }
    }
    

    c=&m= ,我希望它足够清晰。

    我们将所有内容都保留为默认值,并让它使用检查get请求 c m 很像什么 enable_query_strings 但没有启用它,也没有弄乱任何东西,以保持与细分市场的合作。。

    推荐文章