# Enable GZIP compression for text-based files
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/atom+xml
  AddOutputFilterByType DEFLATE application/json
  AddOutputFilterByType DEFLATE application/x-webfont-eot
  AddOutputFilterByType DEFLATE application/x-webfont-ttf
  AddOutputFilterByType DEFLATE application/x-webfont-woff
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-woff2
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
</IfModule>

# Leverage browser caching for static assets (change the times to your needs)
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
</IfModule>

# Set a far future expiration date for fonts
<FilesMatch "\.(woff|woff2|ttf|otf)$">
  Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# Enable ETag headers
FileETag MTime Size

# Remove query strings from static resources
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{QUERY_STRING} !^$
  RewriteCond %{REQUEST_URI} ^(.+)\.(css|js|png|jpg|gif)$
  RewriteRule ^(.*)$ $1? [R=301,L]
</IfModule>

# Disable directory listing
Options -Indexes

# Block access to sensitive files and directories
<FilesMatch "(^\.|wp-config\.php|php\.ini|php\.info|readme\.html|license\.txt)">
  Order allow,deny
  Deny from all
</FilesMatch>

# Rewrite engine
RewriteEngine On

# Set the default document to home.php
DirectoryIndex index.php

# Remove .php extension from URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# Redirect URLs with .php extension to non-.php version
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?/] [NC]
RewriteRule ^ /%1%2 [R=301,L,NE]
