在服务器上找不到404

时间:2017-06-23 17:00:52

标签: php .htaccess model-view-controller

当我尝试加载任何页面时,我在服务器上收到404错误。主页加载没有问题,在localhost上一切正常。

我的路线课程:

    static function start()
        {
            $controller_name = 'add_task';
            $action_name = 'index';

            $routes = explode('/', $_SERVER['REQUEST_URI']);

            if ( !empty($routes[1]) )
            {   
                $controller_name = $routes[1];
            }

            if ( !empty($routes[2]) )
            {
                $action_name = $routes[2];
            }

            $model_name = 'Model_'.$controller_name;
            $controller_name = 'Controller_'.$controller_name;
            $action_name = 'action_'.$action_name;

            $model_file = strtolower($model_name).'.php';
            $model_path = "application/models/".$model_file;
            if(file_exists($model_path))
            {
                include "application/models/".$model_file;
            }

            $controller_file = strtolower($controller_name).'.php';
            $controller_path = "application/controllers/".$controller_file;
            if(file_exists($controller_path))
            {
                include "application/controllers/".$controller_file;
            }
            else
            {
                Route::ErrorPage404();
            }

            $controller = new $controller_name;
            $action = $action_name;

            if(method_exists($controller, $action))
            {
                $controller->$action();
            }
            else
            {
                Route::ErrorPage404();
            }

        }

        function ErrorPage404()
        {
           ...
        }
    }

我的.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

我无法理解问题在哪里

1 个答案:

答案 0 :(得分:0)

使用这个htaac​​cess解决了我的问题:

<IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>

        RewriteEngine On

        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)/$ /$1 [L,R=301]

        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]

        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    </IfModule>