CodeIgniter 和友好的 url

Posted

技术标签:

【中文标题】CodeIgniter 和友好的 url【英文标题】:CodeIgniter and friendly urls 【发布时间】:2011-08-06 10:46:08 【问题描述】:

我目前有一组从控制器名称派生的 url,但它们对 url 不是很友好。

例如,我有没有改变:

example.com/admin/news_manager/add_article

example.com/admin/news-manager/add-article

任何帮助将不胜感激!谢谢。

【问题讨论】:

相关:http://***.com/questions/2428134/codeigniter-routes-regex/2432405#2432405 【参考方案1】:

这就是我所拥有的,将它作为 MY_Router.php 放在你的应用程序/核心文件夹中

它会将您网址中的所有 - 转换为 _。

    <?php

class MY_Router extends CI_Router  
    function set_class($class) 
    
        $this->class = $this->replace_underscores($class);
    

    function set_method($method)
    
        $this->method = $this->replace_underscores($method);
    

    private function replace_underscores($string)
        return str_replace('-', '_', $string);
    

    function _validate_request($segments)
    
        $this->segments = $segments;
        if(empty($this->segments) || $this->controller_is_in_root_folder())
            return $this->segments;

        if ($this->controller_is_in_a_subfolder())
        
            $this->segments =  $this->set_directory_and_remove_from_array();

            if ($this->at_least_one_segment() > 0 && !$this->default_controller_is_in_subfolder())
            
                    show_404($this->fetch_directory().$this->segments[0]);
            
            else
            
                $this->set_class($this->default_controller);
                $this->set_method('index');

                if (!$this->default_controller_is_in_subfolder())
                
                    $this->directory = '';
                    return array();
                
            
            return $this->segments;
        
        else
            show_404($this->segments[0]);
    

    private function at_least_one_segment()
        return count($this->segments) >= 1;
    

    private function controller_is_in_a_subfolder()
        return is_dir(APPPATH.'controllers/'.$this->segments[0]);
    

    private function controller_is_in_root_folder()
        return file_exists(APPPATH.'controllers/'.str_replace('-', '_', $this->segments[0]).EXT);
    

    private function set_directory_and_remove_from_array()
        $this->set_directory($this->segments[0]);
        return array_slice($this->segments, 1);
    

    private function default_controller_is_in_subfolder()
        return file_exists(APPPATH.'controllers/'.$this->fetch_directory().str_replace('-', '_', $this->segments[0]).EXT);
    

【讨论】:

【参考方案2】:

如果它只是一个功能,您可以打开 applications/config/routes.php 并添加如下一行:

$route['^admin/news-manager/add-article'] = $route['admin/news_manager/add_article'];

根据您的其他网址,您可以提出更通用的规则。

【讨论】:

【参考方案3】:

您可以使用 URI 路由。请参阅 CodeIgniter 文档中的 URI routing 页面。

【讨论】:

以上是关于CodeIgniter 和友好的 url的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CodeIgniter 中设计用户友好的 URI?

如何使用 codeigniter 创建 seo 友好的 url?

使用 Codeigniter 重定向 SEO 友好的 url?

codeigniter 中的友好 url,带有 url 中的变量

codeigniter 的 seo 友好 url

Codeigniter 博客应用程序:避免 slug 的重复输入错误