This is our proposed .htaccess
file structure order:
- Litespeed stanza
- Hidden files and folders protection (with auto SSL exception)
- HTTP to HTTPS redirection
- WordPress stanza
- Adaptive Images (where necessary)
- etc
################################################################################ # # # LITESPEED STUFF # # # ################################################################################ # # # BEGIN LSCACHE ## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ## <IfModule LiteSpeed> RewriteEngine on CacheLookup on RewriteRule .* - [E=Cache-Control:no-autoflush] RewriteRule ^min/\w+\.(css|js) - [E=cache-control:no-vary] ### marker FAVICON start ### RewriteRule favicon\.ico$ - [E=cache-control:max-age=86400] ### marker FAVICON end ### </IfModule> ## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ## # END LSCACHE # BEGIN NON_LSCACHE ## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ## ### marker MINIFY start ### <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} ^(.*)/min/(\w+)\.(css|js)$ RewriteCond %1/wp-content/cache/$2/$1.$2 -f RewriteRule min/(\w+)\.(css|js) wp-content/cache/$2/$1.$2 [L] </IfModule> ### marker MINIFY end ### ## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ## # END NON_LSCACHE # # ################################################################################ ################################################################################ # # # PREVENT ACCESS TO HIDDEN FILES # # # ################################################################################ # # # Prevent access to hidden files (but allow for AutoSSL) #======================================================= <IfModule mod_rewrite.c> RewriteCond %{SCRIPT_FILENAME} -d [OR] RewriteCond %{SCRIPT_FILENAME} -f RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteRule "(^|/)\." - [F] </IfModule> # # ################################################################################ ################################################################################ # # # HTTPS/SSL REDIRECTION # # # ################################################################################ # # # Redirect all traffic to https #============================== RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] # # ################################################################################ ################################################################################ # # # WORDPRESS CONFIG (HANDLED AUTOMATICALLY BY WORDPRESS) # # # ################################################################################ # # # BEGIN WordPress # The directives (lines) between `BEGIN WordPress` and `END WordPress` are # dynamically generated, and should only be modified via WordPress filters. # Any changes to the directives between these markers will be overwritten. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress # # ################################################################################ ################################################################################ # # # ADAPTIVE IMAGES # # # ################################################################################ # # # BEGIN Adaptive Images #======================= <IfModule mod_rewrite.c> RewriteEngine On # Watched directories RewriteCond %{REQUEST_URI} /wp-content/uploads [OR] RewriteCond %{REQUEST_URI} /wp-content/themes # Redirect images through the adaptive images script RewriteRule \.(?:jpe?g|gif|png)$ /wp-content/plugins/adaptive-images/adaptive-images-script.php [L] </IfModule> # END Adaptive Images # # ################################################################################ ################################################################################ # # # GENERAL CONFIGURATIONS # # # ################################################################################ # # # Disallow directory listing #============================ Options -Indexes # Make sure UTF-8 encoding is default #===================================== AddDefaultCharset utf-8 # Disallow embedding as an iframe from other domains #==================================================== Header set X-Frame-Options "SAMEORIGIN" <FilesMatch "\.(appcache|atom|bmp|css|cur|eot|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|mp4|og[agv]|opus|otf|pdf|png|rdf|rss|svgz?|swf|tt[cf]|txt|web[mp]|woff2?|xml)$"> Header unset X-Frame-Options </FilesMatch> # # ################################################################################ ################################################################################ # # # DEFINE EXTRA MIME TYPES # # # ################################################################################ # # # Fonts #======= AddType application/font-woff2 woff2 AddType application/font-woff woff AddType application/vnd.ms-fontobject eot AddType application/x-font-ttf ttc ttf AddType font/opentype otf # Favicons #========== AddType image/x-icon cur ico AddType image/vnd.microsoft.icon ico # Media files #============= AddType image/svg+xml svg svgz AddType image/bmp bmp AddType image/webp webp AddType audio/mp4 f4a f4b m4a AddType audio/ogg oga ogg opus AddType video/mp4 f4v f4p m4v mp4 AddType video/ogg ogv AddType video/webm webm AddType video/x-flv flv # Application files #=================== AddType application/json json map topojson AddType application/javascript js AddType application/xml atom rdf rss xml # Misc #====== AddType text/x-component htc AddEncoding gzip svgz # # ################################################################################ ################################################################################ # # # BROWSER CACHING EXPIRES # # # ################################################################################ # # # Activate caching headers #========================== ExpiresActive On # Set caching for different mime types #====================================== ExpiresDefault "access plus 1 week" ExpiresByType text/html "access plus 1 day" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType application/x-javascript "access plus 1 month" ExpiresByType text/javascript "access plus 1 month" ExpiresByType text/xml "access plus 1 day" ExpiresByType application/xml "access plus 1 day" ExpiresByType application/rss+xml "access plus 1 day" ExpiresByType application/atom+xml "access plus 1 day" ExpiresByType application/rdf+xml "access plus 1 day" ExpiresByType image/jpg "access plus 3 months" ExpiresByType image/jpeg "access plus 3 months" ExpiresByType image/png "access plus 3 months" ExpiresByType image/gif "access plus 3 months" ExpiresByType image/bmp "access plus 3 months" ExpiresByType image/svg+xml "access plus 3 months" ExpiresByType audio/ogg "access plus 3 months" ExpiresByType video/mp4 "access plus 3 months" ExpiresByType video/ogg "access plus 3 months" ExpiresByType video/webm "access plus 3 months" ExpiresByType image/vnd.microsoft.icon "access plus 6 months" ExpiresByType image/x-icon "access plus 6 months" ExpiresByType x-font/font "access plus 6 months" ExpiresByType font/eot "access plus 6 months" ExpiresByType font/opentype "access plus 6 months" ExpiresByType application/x-font-ttf "access plus 6 months" ExpiresByType application/font-woff "access plus 6 months" ExpiresByType application/x-font-woff "access plus 6 months" ExpiresByType font/woff "access plus 6 months" ExpiresByType application/font-woff2 "access plus 6 months" ExpiresByType application/vnd.ms-fontobject "access plus 6 months" # Turn ETag headers off #======================= Header unset ETag # # ################################################################################ ################################################################################ # # # ADD CONTENT COMPRESSION # # # ################################################################################ # # # For text, html, javascript, css, xml and fonts #================================================ AddOutputFilterByType DEFLATE "text/html" \ "text/plain" \ "text/css" \ "text/xml" \ "text/x-component" \ "application/xml" \ "application/xhtml+xml" \ "application/atom+xml" \ "application/rdf+xml" \ "application/rss+xml" \ "text/javascript" \ "application/json" \ "application/javascript" \ "application/x-javascript" \ "x-font/font" \ "application/vnd.ms-fontobject" \ "application/x-font-ttf" \ "application/x-web-app-manifest+json" \ "font/eot" \ "font/opentype" \ "image/bmp" \ "image/svg+xml" \ "image/vnd.microsoft.icon" \ "image/x-icon" # # ################################################################################ ################################################################################ # # # DISSALLOW ACCESS TO SENSITIVE FILES # # # ################################################################################ # # # Disallow access to WordPress related files #=========================================== <Files wp-config.php> order deny,allow Deny from all </Files> <Files wp-login.php> order deny,allow Deny from all </Files> <Files wp-register.php> order deny,allow Deny from all </Files> <Files readme.html> order deny,allow Deny from all </Files> <Files error_log> order deny,allow Deny from all </Files> <Files debug.log> order deny,allow Deny from all </Files> # Disallow direct access to core include files #============================================== <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule> # Disallow direct access to PHP files in uploads #================================================ <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule wp-content/uploads/(.*\.php)$ - [R=403,L] </IfModule> # Protect Gravity Forms uploads in general from direct access #============================================================= <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule wp-content/uploads/gravity_forms/.*$ - [R=403,L] </IfModule> # Prevent user enumeration urls #============================== <IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} author=d RewriteRule ^ /? [L,R=301] </IfModule> # # ################################################################################ ################################################################################ # # # DISABLE XMLRPC # # # ################################################################################ # # <Files xmlrpc.php> order deny,allow Deny from all # Exceptions # allow from xxx.xxx.xxx.X/XX </Files> # # ################################################################################ ################################################################################ # # # CREDITS AND KUDOs TO THESE GUYS: # # # ################################################################################ # # # 1. https://github.com/Creare/WP-htaccess/ # 2. https://github.com/h5bp/server-configs-apache/ # 3. http://brechtpalombo.com/stop-wordpress-xmlrpc-php-attack-still-use-jetpack/ # 4. http://forum.ait-pro.com/forums/topic/wordpress-xml-rpc-ddos-protection-protect-xmlrpc-php-block-xmlrpc-php-forbid-xmlrpc-php/ # # ################################################################################