I'm using CodeIgniter 3.1.13 and configured my htaccess file to remove "index.php" but when I try to go to a webpage it doesn't work unless I put the default controller in the URL. Any advice?
Going to the following URLs work fine...
But the following URL does not work...
How do I get this URL to work?
Here's my htaccess file...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
#force https
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
</IfModule>
<IfModule !mod_rewrite.c>
# Without mod_rewrite, route 404's to the front controller
ErrorDocument 404 /index.php
</IfModule>
I changed my config.php to this...
$config['base_url'] = 'https://www.example.com/';
$config['index_page'] = '';
Here's my Welcome.php controller...
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('homepage', $data);
}
function page($pageName)
{
$data['content'] = $this->load->view($pageName, '', TRUE);
$this->load->view('template_page', $data);
}
}
$route['default_controller']
only specifies which controller gets executed when the root directory of the website is requested. That is: when no controller/method
subdirectory/string is given. In your example that would be when www.example.com
or www.example.com/index.php
are requested.
The default controller does not get executed when the requested url subdirectory/string starts with one of its methods.
For the www.example.com/page/test
url to work, you need to either have a Page
controller with a test
method in it:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Page extends CI_Controller {
function __construct()
{
parent::__construct();
}
function test()
{
$this->load->view('test');
}
}
Or add the following to config/routes.php
to have the www.example.com/page/*
urls be handled by the Welcome
controller's page
method:
$route['page/(:any)'] = 'welcome/page/$1';