Redirect index.php to root

FREE THOUGHT · FREE SOFTWARE · FREE WORLD

Redirect index.php to root

WordPress blogs show the same duplicate content for http://www.askapache.com/index.php and http://www.askapache.com/. If you’ve read about using a robots.txt file for WordPress SEO, than you already understand this setup results in Duplicate Content penalties being levied against your Blog and Web Site by Search Engines.

A common request is to be able to remove or redirect the index.php from appearing in the url. This is possible only with server-side technology like .htaccess configuration files or your main server config by using the Mod_Rewrite Rewrite Module.

The Redirect Fix

The fix is a bit of clever .htaccess code utilizing mod_rewrite to only redirect index.php if the request for /index.php came from a client (e.g. browser or web robot), and not if the request is an internal redirect that apache does when / is requested so that it can serve the contents of index.php.

.htaccess mod_rewrite code

askapache.com/index.php

Options +FollowSymLinks
DirectoryIndex index.php
 
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.askapache.com/ [R=301,L]
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

askapache.com/blog/index.php

Options +FollowSymLinks
DirectoryIndex index.php
 
RewriteEngine On
RewriteBase /blog/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /blog/index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.askapache.com/blog/ [R=301,L]
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

More Info

The problem with this is that any request for “/” is internally rewritten to index.php by Apache mod_dir if you have index.php in the DirectoryIndex list (the usual set-up), so it’s difficult to avoid an infinite loop.


«
»

Leave your own comment

Reader Comments

  1. Steeven ~

    I want to redirect browse folder into the root index.php through .htaccess is that possible?
    example:
    the request url is = http://www.site.com/foldername
    this request has to be not to browse the folder, but back into http://www.site.com/index.php and will be process there.. as information the folder with the foldername is exist on the server that cause when requesting is browse the folder..

    thanks

  2. WordPress CSS Display Solution Tutorial | Gary Eckstein ~

    [...] These .htaccess lines above basically send browsers and searchbots to index.php of your WordPress install. AskApache has a good explanation for those interested in further .htaccess information. [...]

  3. Sherry ~

    I used this code and fixed the problem with seeing the index.php in the URL.

    So my question is about how Google sees these links. There may be people
    linking to any combination of these links:

    http://www.domain.com/index.html
    http://www.domain.com/
    http://www.domain.com
    http://www.domain.com/index.php
    

    With your script, does that mean that everyone redirects to http://www.domain.com/
    and does that help with having all backlinks go to one URL? I’ve heard that having the
    4 – can dilute the backlinks.

    Thanks!

  4. AskApache ~

    @Brian

    I don’t think there is such a thing as something that can’t be done with mod_rewrite. That is an unusually difficult situation though.. If you were my client, I would make a list of what is different in the REQUESTS for joomla long vs. everything else. Then I would be able to find the correct RewriteCond’s using the mod_rewrite cheatsheet.

  5. Brian ~

    I am trying to re-direct index.php. and still be able to use my client login features (plugin on home page) on Joomla. Successful to get all redirects except that now my client login plugin does not work when I redirected the index.php. Tried using the … RewriteRule . /index.php [L] … but same problem. So for now it’s back to the site without index.php redirect until I can find an answer. Apache .htaccess code for this or not? I have searched and searched for an answer – still looking. Anyone?

    ~~Brian

  6. Jal Ulati ~

    @ Andrewsha

    Firstly, I’m not criticising, I’m simply confused: what works like a charm?

    I had thought that the original solution would answer your question “But how to rewrite mysite.com/index.php to mysite.com?”

    My question is also how to simple re-write, NOT re-direct, from www.mysite.com/index.php to simple www.mysite.com.

    Can anyone help us?

  7. mktanny ~

    hey i am having the same problem as Dave

    Regards

  8. Andrewsha ~

    Hello!
    Working as a charm!
    But how to rewrite mysite.com/index.php to mysite.com ?

  9. Ellimist ~

    Thanks for posting this. I’ve been looking for this a long time.

    However, I’m having one problem : Any random, non-existing directory-url, like site.com/something/ is giving a 200 Found response code now. And it’s loading the index page.

    A copy of my .htaccess file can be found here.

    I’d be grateful for any advice.

  10. Jacob Cass ~

    Hi,
    I am having a problem that you might easily be able to fix (I can’t as I don’t know much about Apache) because it is related to this post, if you could read my problem at
    http://wordpress.org/support/topic/153081?replies=5#post-681054
    that would be appreciated. Thanks.

  11. Mato ~

    Hello im trying and trying something but i cant!

    First i need to say that i have a rule on .htaccess on my root folder with the code:

    Options +FollowSymlinks
    RewriteEngine on
    rewritecond %{http_host} www.mysite.com.ar [nc]
    rewriterule ^(.*)$ http://mysite.com.ar/$1 [r=301,nc]
    

    I say it because maybe it modify the new thing im trying to do.

    I need a redirect from:
    mysite.com.ar/forum/ --> mysite.com.ar/forum/index.php

    Is this possible?

    Thanks in advance

  12. Dave ~

    This code works like a charm. ONE PROBLEM: Now my 404 pages don’t seem to work. If I go to my root and type a page that doesn’t exist, sdfsdfwe.php, the browser acts like that page exists and serves my index instead.

    Is there a way to keep my 404 working?

Go for it!


It's very simple - you read the protocol and write the code. -Bill Joy

HTML | DCMI | GRDDL | XOXO | XDMP | XFN | DOM | XML | XHTML 1.1 Strict | CSS 2.1 | W3C

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. NCSA HTTPd.
UNIX ® is a registered Trademark of The Open Group. POSIX ® is a registered Trademark of The IEEE.

Site Map | Contact Webmaster | Glossary | License and Disclaimer | Terms of Service

↑ TOP
Main