If you place your “custom” directives outside of any # BEGIN ...
/ # END ...
comment markers then WordPress (and plugins) should not overwrite them when they update. (Of course, if you have plugins that don’t “play nice” then they could do anything to .htaccess
if you let them, so you would need to do something like what @haz suggests in this case.)
In your case, you can simply place those directives above the # BEGIN W3TC Page Cache core
comment. For example:
# Custom directives
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=W3TC_SSL:_ssl]
:
You don’t need to repeat the RewriteEngine On
directive (providing it occurs somewhere in the file). And your directives are not using RewriteBase
anyway – but again, RewriteBase
should only occur once in the file. (The last instance of each of these directives is what controls the entire file.)
(Aside: The parentheses around the RewriteRule
pattern are superfluous in your directive.)