2017-02-21 131 views
0

我遇到了與CodeIgniter: 404 Page Not Found on Live Server相同的問題。在應用/控制器,我的welcome.php像這樣:404當訪問Codeigniter頁面

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

class Welcome extends CI_Controller { 

    /** 
    * Index Page for this controller. 
    * 
    * Maps to the following URL 
*  http://example.com/index.php/welcome 
* - or - 
*  http://example.com/index.php/welcome/index 
* - or - 
* Since this controller is set as the default controller in 
* config/routes.php, it's displayed at http://example.com/ 
* 
* So any other public methods not prefixed with an underscore will 
* map to /index.php/welcome/<method_name> 
* @see https://codeigniter.com/user_guide/general/urls.html 
*/ 
public function index() 
{ 
    $this->load->view('welcome_message'); 
} 

然而,當我去mysite.com,mysite.com/welcome,mysite.com/Welcome和mysite.com/Welcome.php,我每次得到404。

我routes.php文件:

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

我有一個文件,Home.php:

<?php 

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

class Home extends CI_Controller { 

    public function __construct() { 
    parent::__construct(); 
    $this->load->model('general_model'); 
    } 

    public function index() { 
    $this->load->view("home/home_view"); 
    } 

    /* 
    public function coming(){ 
    $this->load->view("home/coming_soon_view"); 
    } 
    */ 
} 

我的.htaccess:

RewriteEngine on 
    RewriteCond $1 !^(phpMyAdmin|index\.php|robots\.txt) 
    RewriteRule ^(.*)$ index.php?/$1 [L] 

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

我真的很掙扎,看我做錯了什麼。

+0

你是什麼'config ['index']'var設置爲? – Kisaragi

+0

從config.php內? –

+0

是的,'$ config ['index_page']' – Kisaragi

回答

1

我在共享主機上有這種經驗,然後以某種方式在互聯網上找到,但忘記了誰給這個例子,也許你可以嘗試它。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    # !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading 
    # slashes. 
    # If your page resides at 
    # http://www.example.com/mypage/test1 
    # then use 
    # RewriteBase /mypage/test1/ 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    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. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 
1

當您設置BASE_URL到

$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; 
$config['base_url'] = $protocol . $_SERVER['HTTP_HOST'] . str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']); 

那麼這就是你需要在你的.htaccess文件

RewriteEngine on 
# → Internally route to /index.php 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

以後可以將其展開,只是用最少的設置馬上。

+0

我試過了,它工作時,只要我有$ route ['default_controller'] =「welcome」;但不是$ route ['default_controller'] =「home」; –

+0

我現在已經設置了它,但是無論何時我去tripmatcher.herokuapp.com/login,它都會顯示一個404,儘管我的控制器中有一個login.php。 –

+0

當你在url中添加index.php時它會工作嗎? – qwertzman

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

這是爲我工作。