11

We have two hosting packages at godaddy. Our live website is working fine using following .htaccess file. Website is accessible without using index.php in url.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L] 

We used same htaccess file and same code on other hosting that is also by godaddy. We just wanted to make production and development instances seperate. But on other hosting with same code and htaccess file, website shows 404 page not found error but website works fine with index.php in url.

We have same php version on both server. Just wants to know what could be the issue?

Anjum
  • 681
  • 3
  • 14
  • 38
  • What is the OS on the server? Is it a dedicated server? What web server are you using? – coderodour Apr 07 '17 at 18:03
  • `.htaccess ` looks fine. The 404 often happens when file naming conventions for CI controller (and models) is not followed. Particularly acute with CI version => 3. You can be fooled if your development machine is a WAMP (on window) stack and you have apache on the live server. They handle character case differently. Also make sure that base_url is set correctly in config.php – DFriend Apr 07 '17 at 19:51
  • What happens if you use this structure for the url `example.com/index.php/your_contoller`? If the page is found then the problem is `.htacccess`. Otherwise, it is probably what I mentioned in the previous comment. – DFriend Apr 07 '17 at 19:58
  • Are you using linux hosting server or windows? – Preetham Hegde Apr 07 '17 at 21:41
  • both servers are linux based. wokring fine on one but not wokring on another. I can access website using index.php in url but can not access otherwise. I have used same htaccess file everything is same except config.php file – Anjum Apr 09 '17 at 14:00
  • These ma y help https://github.com/wolfgang1983/htaccess_for_codeigniter –  Apr 10 '17 at 20:15
  • Please provide apache error log if can. – Abhishek Gurjar Apr 11 '17 at 03:06
  • Can you post the name of the controllers and the views you want to access? – Carlos R Apr 12 '17 at 11:39
  • Issue is with **godaddy** you need to [tweak](http://stackoverflow.com/questions/26572893/codeigniter-htaccess-in-godaddy) htaccess a bit & it will work. – Karan Thakkar Apr 13 '17 at 09:01

9 Answers9

12

I also faced the similar problem when I move my 100% working code to dedicated Debian server. After 3 hours of research, i found out why htaccess file is not working.You need to allow overriding of htaccess in Apache Configuration.

Here are the steps.

Step 1:

Add this in htaccess file

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

Step 2:

Remove index.php in codeigniter config

$config['index_page'] = '';

Step 3:

Allow overriding htaccess in Apache Configuration (Command)

sudo nano /etc/apache2/apache2.conf

and edit the file & change to

AllowOverride All

for www folder

Step 4:

Restart Apache (Command)

sudo /etc/init.d/apache2 restart

Before you make any changes in apache2.conf file make sure to make a backup copy of that file. If you are using Debian server you can avoid sudo command. I believe you know how to connect to your server using ssh client software like putty. Comment below if this method does not work for you.

Geordy James
  • 2,358
  • 3
  • 25
  • 34
  • Codeigniter 3 versions not best to leave base url blank. –  Apr 10 '17 at 20:14
  • @wolfgang1983 I updated my post. actually, i mean to remove the index.php part from base URL but unfortunately, it causes some confusion. Thanks for the suggestion. – Geordy James Apr 11 '17 at 04:01
4

Follow this

  • Create a new .htaccess file in your public_html/Project root
  • Paste the following code

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

  • Optional

If you can ssh into the server using command ssh username@ip_address on a command line either Linux terminal or Putty

The username is the one given to you by GoDaddy or you can use root

The ip_address would be the Public IP to your host you can find it in your hosting panel

Run the command sudo a2dissite 000-default

The command disables the default apache config that handles request

Goodluck!

2

You can use this. This works for me in godaddy hosting.

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?/$1
Ivan
  • 81
  • 1
  • 3
2

try this one.. it's works for me..

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
1

I have faced the similar problem when I move on godaddy server.And It's work for me.

Add this code into your .htaccess file.

<IfModule mod_rewrite.c>
    RewriteEngine On

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d

   # Rewrite all other URLs to index.php/URL
   RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule>
<IfModule !mod_rewrite.c>
       ErrorDocument 404 index.php
</IfModule>

In config file:

$config['base_url'] = 'domain.com';
$config['index.php'] = '';

And Set AllowOverride to All in your httpd.conf

set the correct permission on the /cache folder, rather than just making the folder writable you need to make it reclusively writable.

I hope it will work for you.

Jay Kareliya
  • 760
  • 7
  • 21
1

in index.php you echo "test" and run .then you can check whether it is called or not. in config file enable error log . Make your /application/logs folder writable. In /application/config/config.php set. $config['log_threshold'] = 4;

check the log /application/logs folder

Kumar Rakesh
  • 2,718
  • 2
  • 18
  • 39
Nishancw
  • 11
  • 2
1

Try to lowercase all your controllers. This fix the problem for me.

Carlos R
  • 205
  • 2
  • 12
0

I have limited knowledge in server networking but this should give you a few ideas.

First ,you must know what is .htacess file is. you can check it here link

.htaccess is a configuration file for use on web servers running the Apache Web Server software. When a .htaccess file is placed in a directory which is in turn 'loaded via the Apache Web Server', then the .htaccess file is detected and executed by the Apache Web Server software. These .htaccess files can be used to alter the configuration of the Apache Web Server software to enable/disable additional functionality and features that the Apache Web Server software has to offer. These facilities include basic redirect functionality, for instance if a 404 file not found error occurs, or for more advanced functions such as content password protection or image hot link prevention.

Basically .htaccess is giving you permission to edit the configuration of Apache Web Server. You will gain permission using .htacess if mod_rewrite is enabled in Apache. I will not write what that 4 basic line in .htaccess can do in codeigniter because you can find it in google. this link can give you some nice basic info.

Now the main issue is .htaccess is not working in your other hosting. This is possible because a few reason :

  1. For some reason, mod_rewrite is disabled in your Apache Web Server. If your hosting is VPS or DS it's possible you are didn't configuring it yet. Someone already ask how to enable mod_rewrite, you can go to this link. If you are using Shared Hosting, ask your hosting to enable mod.rewrite in your host. You can check if mod.rewrite enabled or not in your hosting following this link. Or you can simply check with <?php phpinfo(); ?> and check in "Loaded Modules" for mod_rewrite exist or not. Example in this image.
  2. You are not using Apache as Web Server. There are others Web Server as NGINX and lighttpd. You should ask your server administrator what Web Server are you use currently. I dont have any experience using NGINX and lighttpd so i cannot give you any help in that. But as far as i know .htaccess code is different in APACHE, NGINX, and lighttpd. You can try to convert .htaccess apache code to nginx code in here or here. For converting .htaccess to lighttpd unfortunately, i cannot find any online converter but there are official guide here and here
  3. Well for the complete tips sake i will write this. It's possible you are not configuring codeigniter to not use index.php. In config file, empty configuration for index_page. and give Base_url your domain name. $config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';

I hope this clear your confussion why your .htaccess didnt work.

Community
  • 1
  • 1
La Croix
  • 111
  • 3
  • 15
0

As you mentioned here, on localhost your code is working fine but when you moved it over live server it causes 404 error. There might be few cases you need to check:

Step 1: Check mod_rewrite is enabled or not in your Apache configuration

Step 2: Remove index.php in codeigniter config as @geordy suggested

You can check it by

<?php
echo 'Test'; die;
?>

in your root index.php. It ensures your all requests should go through this files else Codeigniter framework would not work properly.

Abhishek Singh
  • 509
  • 4
  • 14