danny
danny

Reputation: 417

how to remove index.php through htaccess [Advanced]

I am using codeigniter. There is always a way to remove index.php from url. The code is following for htaccess and it works fine.

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

But the PROBLEM is: we still can access the website with index.php like following URLS.

Both are accessible:

 http://www.yoursite.com/index.php/cat/subcat 
 http://www.yoursite.com/cat/subcat 

a forced removal of index.php is possible through htaccess? I actually dont want google to have both duplicate copies of same page. Any suggestion is welcomed

Upvotes: 2

Views: 84

Answers (1)

MrWhite
MrWhite

Reputation: 45829

Try the following at the top of your .htaccess file:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php/?(.*) /$1 [R=302,L]

This checks that /index.php exists on the initial request (not just the rewritten request) and then redirects to the URL-path that follows if it is. By specifically checking against THE_REQUEST you avoid a redirect loop.

The trailing slash is optional, so it will also catch requests for /index.php.

Change the 302 (temporary) to 301 (permanent) when you are sure it's working OK.

Upvotes: 3

Related Questions