CodeIgniter Anchor error: URL not found on this se

2019-02-26 05:07发布

问题:

I have been for hours to make a simple anchor link working without success.

My controller is

class Welcome extends CI_Controller {
    public function index()
    {
        $this->load->view('template');
    }

    public function contact()
    {
        $this->load->view('contact');
    }        
}

My template.php view is basically a file with

<a class="menuhref"> <?php echo anchor('welcome/contact/','Contato')?> </a>

I also have a contact.php in the views directory.

My config.php is

$config['base_url']   = 'localhost'; 

$config['index_page'] = 'index.php';

When the template.php loads and I click in the link "contato" I would like to drive the system to the function contact() that would be responsible to open the page contact.php. However, I have got the following error:

"/localhost/index.php/welcome/contact" was not found on this server

What is missing?

回答1:

The base_url config MUST contains the protocol and a trailing slash as well.

From the config.php file:

URL to your CodeIgniter root. Typically this will be your base URL,
WITH a trailing slash:

http://example.com/

If this is not set then CodeIgniter will guess the protocol, domain
and path to your installation.

Hence, you could set the base_url as follows, or in this case simply leave it blank:

$config['base_url'] = 'http://localhost/';

# base_url should be absolute, If you've installed CI in sub-folder:
$config['base_url'] = 'http://localhost/path/to/codeigniter_folder/';

Side-note: in order to use URL helper functions such as anchor(), load the helper file at first: $this->load->helper('url'); (or load the helper automatically via autoload.php config file).


Why does base_url config affect anchor() function?

anchor() function, uses site_url() helper function to determine the URL address of the hyperlink.

And the site_url() itself, uses two base_url and index_page configs to create the URL address.

Hence if you assign a wrong value to base_url and/or index_page configs, the anchor() function won't work properly.