Options -MultiViews
#
# REWRITE
#
# Used to: create nice urls, force https, and hav the site multilanguage.
#
RewriteEngine On
RewriteBase /
# Force https
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# Add final slash.
RewriteRule ^([a-zA-Z]{2})$ $1/ [R=301]
# For files, remove the last /
RewriteCond %{REQUEST_URI} ^/([a-zA-Z]{2}/)?(.{3,})/$
RewriteCond %{DOCUMENT_ROOT}/%2 !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.{3,})/$ $1 [R=301]
# For sections, add the last /
RewriteCond %{REQUEST_URI} ^/([a-zA-Z]{2}/)?(.{3,})$
RewriteCond %{DOCUMENT_ROOT}/%2 -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.{3,})$ $1/ [R=301]
# Hide the 'index.php'
RewriteRule ^(.*)index\.php?$ $1 [L,R=301]
# Remove page extensions
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.(php|html)([#?][^\ ]*)?\ HTTP
RewriteRule ^(.*)\.(php|html)$ $1 [R=301]
# Redirect permalinks.
RewriteRule ^project/([A-Z\-a-z0-9]{3,}+)[\/]?$ /project/project.php?permalink=$1 [NC]
RewriteRule ^blog/([A-Z\-a-z0-9]{3,}+)[\/]?$ /blog/post.php?permalink=$1 [NC]
RewriteRule ^help[\/]?$ /help/index.php [NC]
RewriteRule ^(perfil|xprofile|profila)[\/]?$ /profile/index.php [NC]
# PHP to xml.
RewriteRule ^sitemap.xml$ /sitemap.php [NC]
RewriteRule ^imgmap.xml$ /sitemap-image.php [NC]
RewriteRule ^rss.xml$ /rss.php
# Language as GET param.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([a-zA-Z]{2})(/(.*))?$
RewriteRule ^([a-zA-Z]{2})(/(.*))?$ $3?lang=$1 [L,QSA]
# Add .php extension when needed. TODO: Actualy used?
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1\.php [L]
#
# EXPIRES
#
# Used to: control the cache times of the different files on the server.
#
ExpiresActive on
ExpiresDefault "access plus 2 days"
ExpiresByType application/javascript "access plus 6 days"
ExpiresByType image/x-ico "access plus 12 days"
ExpiresByType image/jpg "access plus 12 days"
ExpiresByType image/jpeg "access plus 12 days"
ExpiresByType image/gif "access plus 12 days"
ExpiresByType image/png "access plus 12 days"
ExpiresByType video/mkv "access plus 12 days"
#ExpiresByType text/css "access plus 6 days"
ExpiresByType text/plain "access plus 6 days"
#
# HEADERS
#
# Used to: control the cache times of the different files on the client.
#
Header set Cache-Control "max-age=864000, public, must-revalidate"
#
# Header set Cache-Control "max-age=864000, public, must-revalidate"
#
Header set Cache-Control "max-age=864000, private, must-revalidate"
Header set Cache-Control "max-age=86400, private, must-revalidate"
AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
AddOutputFilterByType DEFLATE font/truetype font/opentype
#
# ERROR
#
# Used to: redirect to nice error pages.
#
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php