我的路由有问题。我的默认控制器(mysite.com)可以工作,但如果我尝试其他任何东西(例如mysite.com/dashboard),它将转到基于404的服务器,而不是CodeIgniter。这很令人困惑,因为目前我的routes.php文件中只有2个路径。以下是我的routes.php文件的未注释部分:
$route['404_override'] = '';
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
我的控制器位于/application/controllers/pages.php中。
我不认为它是.htaccess问题(因为它可以到达默认控制器),但这是我的.htaccess文件:
RewriteEngine On
RewriteCond $1 !^(index\.php|styles|scripts|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
#<IfModule mod_gzip.c>
# mod_gzip_on Yes
# mod_gzip_dechunk Yes
# mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
# mod_gzip_item_include handler ^cgi-script$
# mod_gzip_item_include mime ^text/.*
# mod_gzip_item_include mime ^application/x-javascript.*
# mod_gzip_item_exclude mime ^image/.*
# mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
#</IfModule>
修改
这是页面控制器:
<?php
class Pages extends CI_Controller {
public function __construct()
{
//Construct it's parent
parent::__construct();
//Check login
//$this->load->model('pages_model');
//$this->pages_model->getLoginStatus();
}
public function view($page = 'dashboard')
{
//If the file doesn't exist
if ( ! file_exists('/var/www/vhosts/mysite/httpdocs/library/application/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
//Load all necessary views
$this->load->view('templates/head', $data);
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
?>
答案 0 :(得分:4)
刚才有同样的问题,只需将.htaccess文件移动到工作目录的根目录
即可
把它从应用程序文件夹中删除
答案 1 :(得分:2)
这是我用于所有项目的htaccess文件:
Options -Indexes
Options +FollowSymLinks
# Set the default file for indexes
DirectoryIndex index.php
<IfModule mod_rewrite.c>
# activate URL rewriting
RewriteEngine on
# do not rewrite links to the documentation, assets and public files
RewriteCond $1 !^(images|assets|uploads|captcha)
# do not rewrite for php files in the document root, robots.txt or the maintenance page
RewriteCond $1 !^([^\..]+\.php|robots\.txt|maintenance\.html)
# but rewrite everything else
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.
ErrorDocument 404 index.php
</IfModule>
然后在config.php文件中确认:
$config['index_page'] = '';
答案 2 :(得分:0)
最近我将服务器上的PHP版本从7.0升级到7.2。 但是,我的CodeIgniter Routing在这样做之后停止了工作。所有请求都在浏览器控制台中返回300错误。
我通过切换回PHP 7.0解决了我的问题。