Reputation: 401
I'm having the same problem as CodeIgniter: 404 Page Not Found on Live Server. Within application/controllers, I have Welcome.php like so:
<?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');
}
However, when I go to mysite.com, mysite.com/welcome, mysite.com/Welcome and mysite.com/Welcome.php, I get a 404 each time.
My routes.php:
$route['default_controller'] = "home";
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
I have a file, 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");
}
*/
}
My .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>
I'm really struggling to see what I'm doing wrong.
Upvotes: 0
Views: 329
Reputation: 401
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
This is what worked for me.
Upvotes: 0
Reputation: 792
When you set your base_url to
$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']);
Then this is all you will need in your .htaccess file
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]
You can expand on it later, just use minimal setup right now.
Upvotes: 1
Reputation: 350
I have this experience on shared hosting then somehow find on internet but forgot who is giving this example, maybe you can try it.
<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>
Upvotes: 1