如何用破折号替换codeigniter url中的下划线?

hai*_*ets 20 php codeigniter url-rewriting

由于原因,我想知道将codeigniter url的下划线更改为短划线的最简单的解决方案.

我的控制器看起来像:

public function request_guide() {
...Load view etc...
}
Run Code Online (Sandbox Code Playgroud)

所以要浏览到这个页面,我将不得不去:

www.domain.com/request_guide
Run Code Online (Sandbox Code Playgroud)

但是我想要更友好,并使用破折号而不是下划线,如下所示:

www.domain.com/request-guide
Run Code Online (Sandbox Code Playgroud)

我认为codeigniter函数需要下划线(可能是错误的).

在之前的项目中,我只使用了mod_rewrite,但我相信这些操作可以使用路由来执行.

我用最简单的方法重写url替换下划线的最简单方法是什么?

Sta*_*tan 48

这真的取决于你的意图.如果您只想更改一个页面,那么开发人员的解决方案确实是完美的:

$route['request-guide'] = "request_guide";
Run Code Online (Sandbox Code Playgroud)

但是如果你想把它作为你网站的默认行为,你应该像这样扩展你的核心路由器类(来源:[在CodeIgniter中使用连字符而不是下划线])

  1. 在'application/core'中创建一个新文件,并将其命名为'MY_Router.php'
  2. 在其中插入此代码:

    <?php
    
    defined('BASEPATH') || exit('No direct script access allowed');
    
    class MY_Router extends CI_Router {
    
        function _set_request ($seg = array())
        {
            // The str_replace() below goes through all our segments
            // and replaces the hyphens with underscores making it
            // possible to use hyphens in controllers, folder names and
            // function names
            parent::_set_request(str_replace('-', '_', $seg));
        }
    
    }
    
    ?>
    
    Run Code Online (Sandbox Code Playgroud)

更新(2015年10月26日):在CodeIgniter 3中有更好的方法,正如@Thomas Wood所说:

$route['translate_uri_dashes'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

  • @ christopher-thomas感谢您的建议!我认为这个解决方案太多了,只能用一行代码来完成. (2认同)

Tho*_*ood 29

Code Ignitor 3内置了这个:

$route['translate_uri_dashes'] = FALSE;

只需更改为TRUE,您可以使用_-.

文档


dev*_*oms 28

找到的路由配置

config/routes.php
Run Code Online (Sandbox Code Playgroud)

是你的朋友.

一个简单的

$route['request-guide'] = "request_guide" ;
Run Code Online (Sandbox Code Playgroud)

会为你做这件事.


Usm*_*med 8

打开application/config/routes.php并进行更改

$route['translate_uri_dashes'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

那是你需要做的.

现在,当您访问www.domain.com/ request-guide时,它将实例化request_guide控制器.

它适用于名称中包含_(下划线)的所有控制器.