Reputation: 1450
I've tried to host a CodeIgniter website in Ubuntu server.
All other websites are working fine without any issues (the sever contains WordPress and Laravel applications). But this particular CodeIngniter website is not taking .htaccess file. I've spend a day to figure out the issue, but no luck.
Here is the details.
Website url structure: http://example.com/website_name
.htaccess file
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Virtual host entry
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com
DocumentRoot "/var/www/example.com"
<Directory "/var/wwww/example.com">
Options Indexes FollowSymLinks MultiViews
AllowOverride ALL
Order allow,deny
allow from all
</Directory>
</VirtualHost>
CodeIgniter config file
$config['base_url'] = 'http://example.com/website_name/';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
And when I'm trying to access the website the output is as follows,
Not Found
The requested URL /website_name/test was not found on this server.
But if I add index.php, the the website is working without any issues. I've tried lot methods and it doesn't worked.
Upvotes: 3
Views: 2502
Reputation: 1450
Finally I've figured out the issue by spending an entire day. Here is the solution.
Updated virtual host entry.
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com/
# Additional section added to get the htaccess working in sub folder.
Alias /website_name/ /var/www/example.com/website_name/
<Directory /var/www/example.com/website_name/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Upvotes: 0
Reputation: 24448
I have a feeling MultiViews
is probably causing some issues.
Change this in your VHOST
Options Indexes FollowSymLinks MultiViews
to this
Options Indexes FollowSymLinks
And also probably add a rewritebase to .htaccess Rewrite
RewriteBase /website_name/
Restart apache for config changes
Upvotes: 1
Reputation: 8964
Not the ultimate answer but a good way to test if .htaccess is working at any level.
Create this .htaccess and put in root directory
RewriteEngine On
Options +FollowSymLinks
RewriteRule ^test\.html http://www.google.com/? [R=301,L]
Then direct a browser to
http://example.com/test.html
If you end up on Google then you know .htaccess is working.
A useful way to debug .htaccess is to use its logging function. Add this to your vhost's configuration:
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9
You'll probably need to restart apache to get logging started.
Upvotes: 0
Reputation: 11987
Try changing your .htaccess
like this.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
Or this
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Upvotes: 0
Reputation: 572
try this .htaccess
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options -Indexes
RewriteEngine On
RewriteBase /website_name/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php [L]
</IfModule>
Upvotes: 2
Reputation: 3098
Add to your .htaccess
RewriteBase /website_name/
after your RewriteEngine on
Upvotes: 1