Apache URL rewrite examples.

Options -Indexes +FollowSymLinks

RewriteEngine On

##### Add WWW ###############################################
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

##### Remove query string ###################################
RewriteCond %{QUERY_STRING} .
RewriteRule ^(.*)$ http://www.domain.com/$1? [L]

##### Remove trailing question mark #########################
RewriteCond %{THE_REQUEST} ? HTTP [NC]
RewriteRule .? http://www.domain.com%{REQUEST_URI}? [R=301,L]

##### Remove trailing index file ############################
RewriteCond %{THE_REQUEST} /index.php HTTP [NC]
RewriteRule (.*)index.php$ /$1 [R=301,L]

##### Add trailing slash ####################################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]

##### Deny access to htaccess ###############################
<files .htaccess>
    order allow,deny
    deny from all
</files>

##### Cache media files #####################################
<filesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf|js|css)$">
    Header set Cache-Control "max-age=2592000, public"
</filesMatch>

##### Don't cache dynamic pages #############################
<filesMatch ".(php|cgi)$">
    Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</filesMatch>