Here are 2 ways to do it.
Method #1: Using a "meta" tag
You could just stick a index.html file at the top of www.example.com that redirects to www.example.com/blog. This index.html file would make use of the "meta" tags that are available in the <head> tag:
For example
<html>
<head>
<meta http-equiv="refresh" content="0;url=http://www.example.com/blog/">
<title>www.example.com blog</title>
</head>
<body>
....
</body>
</html>
You can read more about them here.
NOTE: This method requires that you only want www.example.com/index.html to redirect to www.example.com/blog/.
Method #2: Using an Apache rewrite
#-- blog.example.com --#
<VirtualHost *:80>
UseCanonicalName Off
RewriteEngine On
ServerName blog.example.com
# blog
RewriteRule ^/(.*)$ http://www.example.com/blog/$1 [L,R=301]
</VirtualHost>
Method #3: Using an Apache Reverse Proxy
If you're attempting to take traffic in on say URL http://www.example.com/blog/ but your actual blog is at http://mysuperblog.blogger.com/, then another option would be to reverse proxy the mysuperblog.blogger.com behind an Apache instance tasked with sitting out in front.
#-- www.example.com/blog --#
<VirtualHost *:80>
UseCanonicalName Off
RewriteEngine On
ServerName www.example.com
# /blog -> /blog/
RewriteRule ^/blog$ /blog/ [R]
# blog
ProxyPass /blog http://mysuperblog.blogger.com
ProxyPassReverse /blog http://mysuperblog.blogger.com
</VirtualHost>
NOTE: In order to make use of Apache's reverse proxy functionality make sure that you enable the mod_proxy module.
/blog, but the main site (not the blog) still needs to be at the root level. Additionally, a meta refresh would not cause the actual blog to appear at/blog. – Dem Pilafian Apr 14 '13 at 01:20/blogbut there won't be anything there (nonetheless, I gave the VirtualHost a try... encountered a 500 server error). What would cause the blog (hosted on Google Blogger) to show up at/blog? – Dem Pilafian Apr 22 '13 at 03:49www.example.com/blog– Dem Pilafian May 03 '13 at 21:05