Forum Moderators: phranque
# rewrite defaults
RewriteEngine on
RewriteBase /
#1 charsets
AddCharset UTF-8 .html
#2 trailing slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^!/$ http://example.com/$1/ [R=301,L]
#3 redirect index.html to directory
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html$ http://example.com/$1 [R=301,L]
#4 force extensionless url's
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*[^/.]+\.html\ HTTP/
RewriteRule ^(([^/]+/)*[^/.]+)\.html$ http://example.com/$1 [R=301,L]
#5 canonical hostname
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
#6 prevent hotlinking
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^-?$
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]
#7 caching
<IfModule mod_headers.c>
# YEAR
<FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
Header set Cache-Control "max-age=29030400"
</FilesMatch>
# WEEK
<FilesMatch "\.(js|css|swf)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
# 45 MIN
<FilesMatch "\.(html|htm|txt)$">
Header set Cache-Control "max-age=2700"
</FilesMatch>
</IfModule>
#8 compression
<ifModule mod_deflate.c>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</ifModule>
#9 deny request based on request method
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD)$ [NC]
RewriteRule ^.*$ - [F]
#10 blocking [403 error code]
order allow,deny
# hack-attempts
deny from 14.102.148.38
deny from 144.76.247.203
deny from 198.57.247.156
deny from 201.75.193.190
deny from 202.166.193.69
deny from 202.147.169.205
deny from 37.26.108.85
deny from 46.4.15.141
deny from 49.50.8.63
deny from 50.87.144.147
deny from 82.160.134.5
deny from 91.109.19.34
deny from 93.174.93.163
deny from 94.19.107.228
deny from 94.199.206.71
# ua-string: various
deny from 193.150.120.14
deny from 195.242.218.133
deny from 199.187.122.91
deny from 46.118.155.40
deny from 46.119.115.144
deny from 46.119.120.207
deny from 82.193.99.33
# ua-string: NerdyBot
deny from 107.178.209.42
deny from 107.178.217.202
# ua-string: Web Crawler
deny from 76.9.31.75
# ua-string: updown_tester
deny from 162.243.114.218
deny from 162.243.115.95
deny from 198.199.124.206
# ua-string: YisouSpider
deny from 42.156.136.54
deny from 42.156.139.110
# semalt.com bot
deny from 177.135.46.31
deny from 187.66.223.150
# seomon bot
deny from 176.9.101.134
# sogou.com
deny from 113.106.13.161
allow from all Please do not comment on these.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^!/$ http://example.com/$1/ [R=301,L]
#6 prevent hotlinking
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^-?$
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]
#9 deny request based on request method
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD)$ [NC]
RewriteRule ^.*$ - [F]
Options +MultiViews Options +MultiViews