2

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

2
  • Would the site still work if you force a 301 redirect from index.php/whatever URIs to the /whatever URI? Or would that cause an infinite redirect loop in Apache? Not sure Commented May 9, 2017 at 22:05
  • 301 redirect cause infinite loop. Commented May 9, 2017 at 23:07

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.