【问题标题】:Hiding or removing controller name in url using routes for seo purpose = codeigniter使用路由在 url 中隐藏或删除控制器名称以实现 seo 目的 = codeigniter
【发布时间】:2015-03-02 16:45:20
【问题描述】:

我正在使用一个控制器。如何使用路由删除或隐藏 URL 上的控制器名称? 我已经设置了我的 .htaccess 来删除我的 index.php。我已经尝试了很多其他类似问题的代码,但我没有运气。我不知道我的实时服务器是否有问题,因为在我之前的项目中我使用了这段代码

$route['del/(:any)'] = "my_cotroller";
$route['(:any)'] = 'pages/view/$1';

这很好用,但是当我尝试在我当前的项目中使用它时,它不起作用。 这是我的默认路线

$route['default_controller'] = "my_cotroller";
$route['404_override'] = '';

我想归档像 http://www.sample.com/login 这样的 URL,但我当前的路由代码给了我这个 http://www.sample.com/my_controller/login

感谢您的帮助。

【问题讨论】:

    标签: php .htaccess codeigniter


    【解决方案1】:

    使用 CI 时的简单方法:

    示例控制器:

    <?php
    class Haha extends CI_Controller
    {
        public function check()
        {           
            $this->load->view('path/to/check/view');
        }
    
        public function choke()
        {
            $this->load->view('path/to/choke/view');
        }
    }
    

    示例路线:

    //same name with C method
    $route['check'] = 'haha/check';
    $route['choke/(:any)'] = 'haha/choke';
    
    //or custom route name
    $route['squirrel'] = 'haha/check';
    $route['woohoo/(:any)'] = 'haha/choke';
    

    我的 htaccess:

    RewriteEngine on
    RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
    RewriteCond %(REQUEST_FILENAME) !-f
    RewriteCond %(REQUEST_FILENAME) !-d
    RewriteRule ^(.*)$ ./index.php/$1 [L]
    

    访问 uri:

    http://yoursite.com/check
    http://yoursite.com/choke/whatever
    
    //or
    
    http://yoursite.com/squirrel
    http://yoursite.com/woohoo/whatever
    

    补充: 这是我使用 CI 的旧项目的完整路线,也许你能得到一些东西。

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    $route['default_controller'] = 'sitehome';
    
    $route['page'] = 'sitehome/page';
    $route['page/who-we-are'] = 'site/whoweare';
    $route['page/why-use-us'] = 'site/whyus';
    $route['page/about-us'] = 'site/about';
    $route['page/contact-us'] = 'site/contact';
    $route['page/news'] = 'site/news/news';
    $route['page/topics'] = 'site/topic';
    $route['page/polls'] = 'site/polls';
    $route['page/results'] = 'site/result';
    $route['agent/detail/(:any)'] = 'site/agentdetail';
    $route['register'] = 'site/register';
    $route['login'] = 'site/login';
    
    $route['user/home'] = 'usermain';
    $route['user/edit-account'] = 'user/editaccount';
    $route['user/retire'] = 'user/retired';
    $route['user/business/data'] = 'user/business';
    $route['user/business/topic/create'] = 'user/topic/topiccreate';
    $route['user/business/topic/view'] = 'user/topic/topicview';
    $route['user/business/topic/edit/(:num)'] = 'user/topic/topicedit';
    $route['user/inbox'] = 'user/inbox';
    $route['user/message/read/(:any)'] = 'user/readmessage';
    $route['user/provider/list'] = 'user/providerlist';
    $route['user/provider/send-message/(:any)'] = 'user/providerlist/sendmessage';
    $route['user/notification'] = 'user/notified';
    $route['user/inquiry'] = 'user/inquiry';
    
    //testing purpose
    $route['percobaan'] = 'coba/percobaan';
    
    $route['poll'] = 'site/polls/retrievePoll';
    
    //serve response
    $route['response/single-poll'] = 'api/ResponseData/serveHomePoll';
    $route['response/multi-poll'] = 'api/ResponseData/servePoll';
    
    $route['404_override'] = 'notFound';
    $route['translate_uri_dashes'] = FALSE;
    
    /* End of file routes.php */
    /* Location: ./application/config/routes.php */
    

    注意事项:

    http://example.com/business/ 将失败或不存在。

    祝你好运。

    【讨论】:

    • 所以我需要为每个页面创建单独的路由?创建一个自动处理所有并删除控制器名称的路由怎么样?因为,这段代码会自动删除控制器名称 $route['del/(:any)'] = "my_cotroller"; $route['(:any)'] = 'pages/view/$1';但是,这不再适用于我当前的项目,我不知道为什么。
    • (:any) 表示只要允许字符,您就可以在 uri 上提供任何内容。 $route['choke/any'] = 'haha/choke'; 将把用户带到 haha​​/choke 控制器,无论他们在段 2 中使用什么。除了你在控制器上过滤它或模型只接受段 2 上的一些词。
    • 如果我做对了,它可能是这样的。 $route['choke2/(:any)'] = '哈哈/choke2'; $route['choke3/(:any)'] = '哈哈/choke3'; $route['choke4/(:any)'] = 'haha/choke4';
    • 是的,例如:$route['choke2/(:any)'] = 'haha/choke2'; 可通过http://example.com/choke2/whathttp://example.com/choke2/bla-blahttp://example.com/choke2/aw-so-some 访问。 2(第二)uri段将指向haha/choke2。但是这个 uri http://example.com/choke2/else/if 将失败,因为它包含第三段,因为它没有在路线上声明。
    • 我明白了!感谢您的帮助。
    【解决方案2】:

    您可以在 config/routes.php 中定义自定义路由 - 例如:

    $route['about'] = 'name_controller/about';
    

    那么,http://example.com/about 转至http://example.com/name_controller/about

    查看更多http://ellislab.com/codeigniter/user-guide/general/routing.html

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2012-11-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多