php - .htaccess not working for CodeIgniter project on Mac OS

974

I used CodeIgniter for most of my projects a while back. I'm getting back into the swing of things and hitting some bumps. I'm now developing on Mac OSX Mavericks and using MAMP as my Apache server. Everything seems to be running okay but I can't get rid of the index.php in the URL the whole time. I have added in the .htaccess file into the root of the project. Here's the file:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /ez-recruits/

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
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> 

I'm not super clued up about how to make these files so generally I just get them from CodeIgniters website. I'm getting a 404 Error without the index.php in the URL and if I manually type it in, the page will load fine. Also, I was developing in Firefox and I was getting an error saying "Firefox could not understand the address" without the index.php in the URL. I do have mod_rewrite activated on the Apache server. I have removed index.php in my config file for the index page and I have set the base_url to

$config['base_url'] = 'localhost:8888/ez-recruits';

I did some research and found that changing the httpd.conf file helped someone else, so I changed the part of it to this:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>

But it has changed nothing. Does anybody know what I could be doing wrong or if this is just a Mac problem? Also, with all of these configurations, will I struggle to develop alongside someone else who is developing on a Windows machine?

Thanks in advance.

456

Answer

Solution:

Try this for your .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    #RewriteCond %{ENV:REDIRECT_STATUS} ^$
    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>

Also, you can leave$config['base_url'] blank, which makes life easier if you're working on multiple systems.

Hope this helps!

698

Answer

Solution:

You need to usebase_url andindex_page in the config.php file

$config['base_url']     = 'http://yourlocalurl/';
$config['index_page'] = 'index.php';
521

Answer

Solution:

Ensure the following helpers are loaded inconfig/autoload.php

$autoload['helper'] = array('url','file');

People are also looking for solutions to the problem: codeigniter - PHP - URL variables captured and passed to next page

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.