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.


«
»

Skip to Comments

Add Your Opinion

Reader Comments

  1. mktanny ~

    hey i am having the same problem as Dave

    Regards

  2. Andrewsha ~

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

  3. 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.

  4. 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.

  5. 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

  6. 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?


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 | TLDP | WAI | DISA | ICSI | GIAC | SANS RR | GHOST | DEFCON | NIST | DHS CYBER | NIST | .:: Phrack Magazine ::.

↑ TOPExcept 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. HTTPD based on NCSA HTTPd

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