路由/重写/删除index.php:仅适用于default_controller,但不适用于其余视图

时间:2012-10-02 18:58:18

标签: php .htaccess codeigniter

按照教程从代码点火器中的网址中删除index.php

它适用于我的default_controller,但不适用于其他页面(或视图)。

我有一个控制器页面,它有一种方法,查看( $ page ='home' ,根据传递的参数加载包含其他内容的网页。

如果我在网址中输入localhost/dev - 我就会登陆我的主页,这是正确的。

如果我输入localhost/dev/aboutus,我会收到 404 。它只有在我键入localhost/dev/pages/view/aboutus时才有效。

我想要的是输入localhost/dev/aboutus它会显示关于我们视图。

routes.php文件

$route['default_controller'] = "pages/view";
$route['dev/(:any)'] = "dev/pages/view/$1";
$route['404_override'] = '';

Pages.php (控制器)

<?php
    class Pages extends CI_Controller
    {
        public function view($page = 'home')
        {
            if (!file_exists('application/views/pages/' . $page . '.php'))
            {
                // Whoops, we don't have a page for that!
                show_404();
            }

            $data['title'] = ucfirst($page); // Capitalize the first letter

            $this->load->view('templates/header', $data);
            $this->load->view('pages/' . $page);
            $this->load->view('templates/footer');
        }
    }
?>

.htaccess文件 (位于/ dev /文件夹中)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /dev/

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule> 

2 个答案:

答案 0 :(得分:1)

此路由$route['dev/(:any)'] = "dev/pages/view/$1";有点可疑,因为CodeIgniter路由不应包含项目名称(在您的情况下为dev)。它们从控制器级别开始,而不是项目级别。

您编写的路线意味着如果用户键入http://localhost/dev/dev/something(是,两个开发者),他们将被路由到控制器dev.php并进入具有原型的函数:function('view', 'something'){}

为什么这么复杂?您应该将所有主页面名称都设置为控制器。只有特殊情况才能触及路线。

aboutus.php中创建一个文件application/controllers,内容为:

<?php
class Aboutus extends CI_Controller{
    function __construct(){
        parent::__construct();
    }

    function index(){
        "I'm in the about controller!";
        //$this->load->view("some_view") ;
    }
}

您可以使用http://localhost/dev/aboutus

访问它

答案 1 :(得分:0)

在你的config.php中,如果没有,请将其留空 $ config ['index.php'] ='';