« Want to know how to really hack?Troubleshooting Apache .htaccess Authentication »
August 9th, 2007
Contents
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.
Reader Comments
-
thanks ,you made my day..redirecting working now
-
Thanks for the awesome tip... That index.php thing is easy to miss with WordPress and other packages out there such as zen cart... This is an easy fix... Just popped your code into my htaccess file and all good now... Thanks.
-
Superb article, bless you!
-
Hello. I have a magento store and I'm trying to delete or redirect links that have index.php. Example:
http://domain.com/my-film-color-guide http://domain.com/index.php/my-film-color-guide
(I want to automatically redirect this to the other link w/o index.php. any way I can do this via .htaccess? Thank you very much. -
I want to redirect browse folder into the root
index.phpthrough.htaccessis that possible? example: the request url is =http://www.site.com/foldernamethis request has to be not to browse the folder, but back intohttp://www.site.com/index.phpand 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 Pingback:WordPress CSS Display Solution Tutorial | Gary Eckstein
-
I used this code and fixed the problem with seeing the
index.phpin 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 tohttp://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! -
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
-
@ 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?
-
hey i am having the same problem as Dave Regards
-
Hello! Working as a charm! But how to rewrite
mysite.com/index.phptomysite.com? -
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 a200 Foundresponse code now. And it's loading the index page. A copy of my.htaccessfile can be found here. I'd be grateful for any advice. -
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.
-
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.phpIs this possible? Thanks in advance -
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?

Following is a better way to do it and it includes all possibilities
####################################### # Redir to folder if using index file # ####################################### RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /(index)|(home)(\..{3,4})?$ [NC] RewriteRule ^([^/]+/)+ http://www.askapache.com/$1? [R=301,L] ########################################################## # Local Rewrite to File. Replace php with your extension # ########################################################## RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #next line prevents a 404 becoming a 500 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L]