【问题标题】:File not Found Codeigniter in production在生产中找不到文件 Codeigniter
【发布时间】:2017-07-06 03:03:24
【问题描述】:

所以我已经把我的网站上线了,只有我的登录页面 (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
  • 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.我的路由.php:

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

6.和config.php:

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

我在尝试除http://www.my-websiteabc.net/ 之外的任何其他内容时得到File not found.,但在此页面上所有图像和 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); 
    }    
}

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

我的看法:cookies.php

【问题讨论】:

  • 加载http://www.my-websiteabc.net/index.php/About_cookies时会发生什么?
  • 在你的 routes.php 上尝试小写 $route['default_controller'] = 'home_controller'; 确保你的文件和类名和类名只有第一个大写字母。
  • 请贴出 Home_controller.php 文件的代码。至少是类声明。
  • http://www.my-websiteabc.net/index.php/About_cookies 工作正常!我检查了我的网络托管服务提供商并且 mod_rewrite 应该可用。无法弄清楚为什么如果没有 URL 中的 index.php,它就无法工作
  • 那么你的 .htaccess 是错误的。我会发布我的。 CodeIgniter 默认就是这样工作的。当您指定要加载哪个控制器时,您的情况是特殊情况,因此它默认为配置文件中指定的控制器(default_controller)。

标签: php .htaccess codeigniter


【解决方案1】:

尝试使用这个.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 文件夹树的根目录)的一侧,而不是任何文件夹内。

【讨论】:

  • 谢谢,但是当我将这个 .htaccess 放在 CI 树的根目录(与应用程序、css、js、系统...相同的级别)时,我得到了相同的症状。我没有.htaccess在申请,对吗?
  • 至少我的application 文件夹确实有一个.htaccess 文件。这与您在第四项中指定的相同。
  • 如果我把它加回来也是一样的。
  • 你是如何定义你的控制器的?例如,对于account 控制器,您应该创建application/account.php,并且它至少应该有:&lt;?php class Account extends CI_Controller { public function index() { echo "HELLO"; } } ?&gt;,那么带有.htaccess 的URL 应该是http://www.my-websiteabc.net/account
  • 我用控制器定义和视图名称编辑了我的问题。
【解决方案2】:

看了很多帖子,终于找到了解决办法here

以下.htaccess 适合我:

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

区别在于index.php后面的问号?

我还不能说这是否会降低性能,但我真的很想知道? 的变化。我没有找到有关此主题的任何文档。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2017-05-25
    • 2017-03-07
    • 2017-01-06
    相关资源
    最近更新 更多