.htaccess File

This section tells about how you can tweak/configure the root .htaccess file. This file is only necessary if you are using PrettyURLs, but can be of use in other ways.

Force no-www / www

GetSimple doesn't by default force a domain to use either www or no-www based on its SITEURL that is setup within the administrative panel. You can add this code to force it to never use www in your URL:

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

Conversely, if you’d prefer to use www in all of your URLs, you can use this:

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

The code above should be included in your .htaccess file below the RewriteBase line, but before the RewriteCond %{REQUEST_FILENAME} !-f line. See this forum post for more information.

Installing into subdir whilst keeping root relative Fancy URL's

To install GetSimple into a subdir of your webserver such as …/cms/ . You may complete the installation using standard procedures. Upon completion you will want to create or edit your existing .htaccess file in the root directory of your webserver to include the following

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} =/
RewriteRule ^(.*)$ /cms/$1 [L]

Of course, you must replace “cms” in the above sample with the directory you chose to install GetSimple into. This will allow you visitors to navigate to mydomain.com/contact-us rather than mydomain.com/cms/contact-us

If you are editing an existing installation, be sure to change the website base URL in General Settings to reflect the new root url, so the navigation links are changed.

Optimization

In lieu of using a caching plugin to speed up your GetSimple based website, you can try adding this little piece of code to the bottom of your root level .htaccess file. It's been running on get-simple.info for months with absolutely no problems.

# Enable GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</ifmodule>

# Expires Headers - 2678400s = 31 days
<ifmodule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType image/gif "access plus 2678400 seconds"
  ExpiresByType image/jpeg "access plus 2678400 seconds"
  ExpiresByType image/png "access plus 2678400 seconds"
  ExpiresByType text/css "access plus 518400 seconds"
  ExpiresByType text/javascript "access plus 2678400 seconds"
  ExpiresByType application/x-javascript "access plus 2678400 seconds"
</ifmodule>

# Cache Headers
<ifmodule mod_headers.c>
  # Cache specified files for 31 days
  <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
  Header set Cache-Control "max-age=2678400, public"
  </filesmatch>
  # Cache HTML files for a couple hours
  <filesmatch "\.(html|htm)$">
  Header set Cache-Control "max-age=7200, private, must-revalidate"
  </filesmatch>
  # Cache PDFs for a day
  <filesmatch "\.(pdf)$">
  Header set Cache-Control "max-age=86400, public"
  </filesmatch>
  # Cache Javascripts for 31 days
  <filesmatch "\.(js)$">
  Header set Cache-Control "max-age=2678400, private"
  </filesmatch>
</ifmodule>

Thanks to Dave Rupert for the code that was originally created for WordPress.

Depending on your setup you may need to add the following lines, to prevent caching of the admin pages, and the edited pages therein:

<FilesMatch "\.(php)$">
    <IfModule mod_expires.c>
        ExpiresActive Off
    </IfModule>
    <IfModule mod_headers.c>
        Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
    </IfModule>
</FilesMatch>

.html instead of slash (/)

To have .html document ending (with mod_rewrite), instead of slash (“/”), please see these two forum post:

Details

First change the custom permalink-structure in the configuration / settings to:

%slug%.html

or

%parent%/%slug%.html 

Second; edit your .htaccess-file:

instead of

RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]

set this:

RewriteRule ([A-Za-z0-9-]+).html index.php?id=$1 [QSA,L]