只有默认控制器正在运行,其余的404未找到

时间:2017-07-03 16:48:32

标签: php apache .htaccess codeigniter controller

我在我的wamp上使用codeigniter但一切都很好但是当我在实时服务器上传它时,default_controller正在工作,但是找不到404其他控制器或者“在此服务器上找不到请求的URL / Sample_controller”。

这是我的样本控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Sample_controller extends CI_Controller {
        function __construct(){
            parent::__construct();
    }

    public function index(){
        print_r('Hello World');
    }
}

这是我的config.php:

$config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
$config['directory_trigger'] = 'd';
$config['allow_get_array'] = TRUE;

这是我的router.php:

$route['default_controller']    = 'login';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

和我的.htaccess:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    Options +Indexes
    RewriteEngine On

    RewriteBase /folder
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} !www.sampleurl.com$ [NC]
    RewriteCond %{REQUEST_URI} ^/$


    RewriteCond $1 !^(index\.php|assets|user_assets|tmp|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

如果我尝试了这个sampleurl.com它工作正常并将我引导到我的默认控制器,这是登录,但如果我尝试这个sampleurl.com/sample_controller或sampleurl.com/login它将导致我404找不到在此服务器上找不到请求的URL / sample_controller。 sampleurl.com端口80的Apache / 2.4.7(Ubuntu)服务器

我希望有人可以帮助我 我尝试将它们改为:

$config['uri_protocol'] = AUTO
$config['enable_query_strings'] = TRUE;

它仍然没有用。

3 个答案:

答案 0 :(得分:0)

您需要为该控制器添加路由才能正常工作

$route['sample_controller']    = 'sample_controller';

对于您创建的每个新控制器,您需要为其创建路径

答案 1 :(得分:0)

根据您的代码,您可能会遇到以下两个问题:
1-根据documentation,您需要使控制器文件名首字符为大写。
2-尝试添加问号“?”在.htaccess文件的最后一条规则中。同时删除“index.php”之前的“/”检查下面的代码。

当前代码:

RewriteRule ^(.*)$ /index.php/$1 [L]


新代码:

RewriteRule ^(.*)$ index.php?/$1 [L]

答案 2 :(得分:0)

只需更改

即可
RewriteBase /folder

.htaccess文件中的这行代码到项目的相应文件夹名称,它将正常工作。