文件未找到Codeigniter在生产中

时间:2017-07-04 22:11:30

标签: php .htaccess codeigniter

所以我已将我的网站放在网上,只有我的登录页面(Home_controller)工作正常但其他任何页面都无效。

http://www.my-websiteabc.net/工作正常但不是http://www.my-websiteabc.net/About_cookies

http://www.my-websiteabc.net/Home_controllerhttp://www.my-websiteabc.net/home_controller也不起作用。

我花了一整天时间阅读不同的建议和解决方法,但无法让它发挥作用。

到目前为止我已尝试过:

1.我的控制器文件名和类具有第一个大写字符。例如:

  • About_cookies.php
  • class About_cookies扩展了CI_Controller
  • 查看:cookies.php

2.我的文件夹结构是:

/.
   /my-websiteabc
   /my-websiteabc/application
   /my-websiteabc/js
   /my-websiteabc/css
   /my-websiteabc/system

3.我在根文件夹中的.htaccess包含:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

4.我也尝试在应用程序文件夹中使用/不使用.htaccess:

<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>

5.我的routes.php:

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

6.And config.php:

$config['base_url'] = 'http://www.my-websiteabc.net/';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

我在尝试除File not found.之外的其他任务时获得http://www.my-websiteabc.net/,但在此页面上所有图片和CSS都是正确的,所以我想我的路径是正确的。

使用CI 3.1.5和PHP 7.1.6

更新05/07:

控制器定义(About_cookies.php):

<?php
class About_cookies extends CI_Controller {
    public function __construct() {
        parent::__construct(); 
        $ci =& get_instance();
        if ($ci->session->userdata('site_lang')) {
            $siteLang = $ci->session->userdata('site_lang');
        } else {
            $siteLang = 'english';
            $this->session->set_userdata('site_lang', $siteLang);
        }
        $ci->lang->load('home',$siteLang);
    }

    public function index(){ 
        $data['main_content'] = 'cookies';
        $this->load->view('templates/default',$data); 
    }    
}

我的浏览器尝试访问的网址: http://www.my-websiteabc.net/About_cookies

我的观点:cookies.php

2 个答案:

答案 0 :(得分:0)

尝试使用此.htaccess定义:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<FilesMatch "\.(html|htm|js|css|php)$">
    FileETag None
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>

SetEnv CI_ENV development

为清楚起见,它有三个部分:

  • 第一个是您需要的,会自动且透明地将mysite.domain/controller URI转换为mysite.domain/index.php/controller
  • 第二部分只是禁用某些文件的缓存。在这种情况下,不会缓存包含htmlhtmjscssphp扩展名的文件。这不是您的问题的一部分,但我认为在某些情况下它可能对您有用(您可能希望删除php扩展名以使CodeIgniter内部缓存起作用。)
  • 第三个设置CodeIgniter的环境。它可以是developmentproduction

请注意,此.htaccess文件应位于index.php(整个CodeIgniter文件夹树的根目录下)的一侧,而不是在任何文件夹中。

答案 1 :(得分:0)

阅读了很多帖子后,我终于找到了解决方案here

以下.htaccess对我有用:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

造成差异的是?

之后的问号index.php

我无法说这是否会降低效果,但我真的想知道这个?会发生什么变化。我没有找到关于这个主题的任何文档。