# BEGIN SpeedyCacheheaders
FileETag None
Header unset ETag
Header set x-speedycache-source "Server"
Header set Cache-Tag "essaybishops.com"
Header set CDN-Cache-Control "max-age=1296000"
Header set Cache-Control "public"
Header unset Pragma
Header unset Last-Modified
Header unset Pragma
Header set Cache-Control "public"
# END SpeedyCacheheaders
# BEGIN Gzipspeedycache
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/woff
AddOutputFilterByType DEFLATE font/woff2
AddOutputFilterByType DEFLATE text/js
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/font-woff2
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
# END Gzipspeedycache
# BEGIN LBCspeedycache
ExpiresActive on
ExpiresDefault A0
ExpiresByType text/css A31536000
ExpiresByType text/javascript A31536000
ExpiresByType font/ttf A31536000
ExpiresByType font/otf A31536000
ExpiresByType font/woff A31536000
ExpiresByType font/woff2 A31536000
ExpiresByType image/jpg A31536000
ExpiresByType image/jpeg A31536000
ExpiresByType image/png A31536000
ExpiresByType image/gif A31536000
ExpiresByType image/webp A31536000
ExpiresByType image/x-icon A31536000
ExpiresByType image/svg+xml A31536000
ExpiresByType image/vnd.microsoft.icon A31536000
ExpiresByType video/ogg A31536000
ExpiresByType video/mp4 A31536000
ExpiresByType video/webm A31536000
ExpiresByType audio/ogg A31536000
ExpiresByType application/pdf A31536000
ExpiresByType application/javascript A31536000
ExpiresByType application/x-javascript A31536000
ExpiresByType application/x-font-ttf A31536000
ExpiresByType application/x-font-woff A31536000
ExpiresByType application/font-woff A31536000
ExpiresByType application/font-woff2 A31536000
ExpiresByType application/vnd.ms-fontobject A31536000
# END LBCspeedycache
# BEGIN WEBPspeedycache
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME} \.(jpe?g|png|gif)$
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule ^(.+)\.(jpe?g|png|gif)$ $1.webp [T=image/webp,L]
Header append Vary Accept env=REDIRECT_accept
AddType image/webp .webp
# END WEBPspeedycache
# ============================================================
# DOMAIN ALIAS — bishopswritingbureau.com → essaybishops.com
#
# Both domains share the same document root and WordPress
# installation. This block must come BEFORE the SpeedyCache
# and WordPress rewrite sections so that:
# 1. SpeedyCache stores/serves separate cache buckets per
# HTTP_HOST (it already uses %{HTTP_HOST} in the cache
# path, so no extra work needed there).
# 2. WordPress receives the correct SERVER_NAME / HTTP_HOST
# and wp-config.php maps each host to the right siteurl.
# No redirect is performed here — the alias serves the SAME
# content under the visitor's own URL.
# ============================================================
RewriteEngine On
# Normalise bare bishopswritingbureau.com → www (optional,
# mirror the same www/non-www policy you use for essaybishops)
RewriteCond %{HTTP_HOST} ^bishopswritingbureau\.com$ [NC]
RewriteRule ^(.*)$ https://www.bishopswritingbureau.com/$1 [R=301,L]
# ============================================================
# END DOMAIN ALIAS
# ============================================================
# BEGIN speedycache
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{HTTP_USER_AGENT} !(Mediatoolkitbot|facebookexternalhit|SpeedyCacheCCSS)
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP:Cookie} !(comment_author_|wordpress_logged_in_)
# ── FIX 1: Never serve SpeedyCache HTML for dashboard/portal paths ──────
# Without this, SpeedyCache serves a stale cached WP-404 or wp-login
# redirect for /dashboard and /dashboard/authorization, bypassing
# prox-dashboard.php entirely. These paths must always hit the live PHP.
RewriteCond %{REQUEST_URI} !^/(dashboard|order|checkout|payment|papers|inquiry|class-help|install) [NC]
# ── END FIX 1 ────────────────────────────────────────────────────────────
RewriteCond %{REQUEST_URI} !(\/){2}$
RewriteCond %{REQUEST_URI} !^/(wp-(?:admin|login|register|comments-post|cron|json))/ [NC]
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/speedycache/%{HTTP_HOST}/all%{REQUEST_URI}/index.html -f
RewriteRule ^(.*) /wp-content/cache/speedycache/%{HTTP_HOST}/all%{REQUEST_URI}/index.html [L]
# END speedycache
# ============================================================
# BOT & SPAM USER AGENT BLOCKING — essaybishops.com
# Updated April 2026
#
# CHANGES IN THIS VERSION:
# • Added REAL-USER WHITELIST block at the top — passes all
# legitimate Chrome, Edge, Firefox, Safari, Opera, and mobile
# browsers through immediately, skipping all blocking rules.
# • Added Perplexity-User/1.0 whitelist (Comet browser support).
# • Added Googlebot / Bingbot / DuckDuckBot whitelist so SEO
# crawlers still index your site.
# • All original bot-blocking Rules 0–11 fully retained and
# unchanged — they only fire if the whitelist did NOT match.
# • Skip count [S=N] on each whitelist rule is set to 30 to
# safely skip all blocking rules below. Adjust if you add more.
# ============================================================
RewriteEngine On
# ============================================================
# SECTION A — REAL USER & TRUSTED BROWSER WHITELISTS
# These rules run FIRST. Any match skips ALL blocking rules
# below via [S=30]. Real users are never blocked.
# ============================================================
# ------------------------------------------------------------
# A1 — Perplexity Comet browser (live-user UA)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Perplexity-User/1\.0" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A2 — Google Chrome (any real version) on Windows 10/11
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Windows NT (10|11)\.[0-9].*Chrome/1[4-9][0-9]\.[0-9]+\.[0-9]+\.[0-9]+" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A3 — Microsoft Edge (Edg/ token) on any OS
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Edg/[0-9]+" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A4 — Mozilla Firefox on Windows, Mac, Linux
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Firefox/[0-9]+" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A5 — Apple Safari on macOS (not Chrome, not Firefox)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Macintosh.*Safari/[0-9]+" [NC]
RewriteCond %{HTTP_USER_AGENT} "!Chrome/" [NC]
RewriteCond %{HTTP_USER_AGENT} "!Chromium/" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A6 — Safari on iPhone (iOS 14+)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "iPhone.*CPU iPhone OS 1[4-9]_" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "iPhone.*CPU iPhone OS [2-9][0-9]_" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A7 — Safari on iPad (iPadOS 14+)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "iPad.*CPU OS 1[4-9]_" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "iPad.*CPU OS [2-9][0-9]_" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A8 — Opera browser (OPR/ or Opera/ token)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "(OPR/|Opera/)[0-9]+" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A10 — Chrome on Android (real modern Android users)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Android.*Chrome/[9][0-9]\." [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "Android.*Chrome/1[0-9][0-9]\." [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A11 — Samsung Internet browser
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "SamsungBrowser/[0-9]+" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A12 — SEO crawlers
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "(Googlebot|bingbot|DuckDuckBot)" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A13 — Chrome on macOS (real non-zero-patch builds)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "Macintosh.*Chrome/1[0-9][0-9]\.[0-9]+\.[0-9]+\.[0-9]+" [NC]
RewriteCond %{HTTP_USER_AGENT} "!\.0\.0\.0" [NC]
RewriteRule .* - [S=30]
# ------------------------------------------------------------
# A14 — Chrome on Linux desktop (real non-zero-patch builds)
# ------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} "X11; Linux x86_64.*Chrome/1[0-9][0-9]\.[0-9]+\.[0-9]+\.[0-9]+" [NC]
RewriteCond %{HTTP_USER_AGENT} "!\.0\.0\.0" [NC]
RewriteRule .* - [S=30]
# ============================================================
# SECTION B — PAYMENT/CHECKOUT WHITELIST
# ============================================================
RewriteCond %{REQUEST_URI} ^/(payment|checkout|prox-payment\.php|prox-checkout\.php) [NC]
RewriteRule .* - [S=20]
# ============================================================
# SECTION C — BOT BLOCKING RULES (Rules 0–11)
# ============================================================
RewriteCond %{HTTP_USER_AGENT} "Mozilla/5\.0 \(iPhone; CPU iPhone OS 13_2_3 like Mac OS X\) AppleWebKit/605\.1\.15 \(KHTML, like Gecko\) Version/13\.0\.3 Mobile/15E148 Safari/604\.1" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 10\.0; Win64; x64" [NC]
RewriteCond %{HTTP_USER_AGENT} "Chrome/(9[0-9]|1[0-3][0-9]|14[0-4])\.0\.0\.0" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 10\.0; Win64; x64.*Chrome/133\.0\.6943\.141" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 10\.0; Win64; x64.*Chrome/99\.0\.4844\.51" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 10\.0; Win64; x64.*Chrome/104\.0\.5112\.81" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 10\.0; Win64; x64.*Chrome/106\.0\.5249\.119" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT" [NC]
RewriteCond %{HTTP_USER_AGENT} "Chrome/[0-9]{1,2}\." [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Macintosh" [NC]
RewriteCond %{HTTP_USER_AGENT} "Chrome/[0-9]{1,2}\." [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 6\.1" [NC]
RewriteCond %{HTTP_USER_AGENT} "Chrome/(1[1-9][0-9]|[2-9][0-9]{2})\." [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Windows NT 6\.1.*Chrome/126\.0\.6478\.114" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "iPhone.*CPU iPhone OS 1[0-1]_" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "iPhone.*CPU iPhone OS 13_" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Linux; U; Android" [NC]
RewriteCond %{HTTP_USER_AGENT} "zh-cn" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "Chrome/(39|4[0-9]|5[0-9]|60)\." [NC]
RewriteCond %{HTTP_USER_AGENT} "(Android|Mobile)" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} "X11; Linux aarch64" [NC]
RewriteCond %{HTTP_USER_AGENT} "Chrome/(9[0-9]|1[0-3][0-9]|14[0-5])\.0\.0\.0" [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (ahrefsbot|semrushbot|dotbot|mj12bot|blexbot|rogerbot|exabot|gigabot|baiduspider|yandexbot) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (masscan|nikto|sqlmap|nmap|zgrab|nuclei|dirbuster|acunetix|nessus|havij) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (phantomjs|headlesschrome|headless|python-requests|go-http-client) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (curl\/|wget\/|libwww-perl|java\/|jakarta|httpclient) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (spambot|harvest|emailcollector|emailwolf|emailreaper|scraper|grabber) [NC]
RewriteRule .* - [F,L]
# ============================================================
# END BOT BLOCKING — USER AGENTS
# ============================================================
# Hide directory listings
Options -Indexes
DirectoryIndex index.php index.html
# No font warnings please
AddType font/ttf .ttf
AddType font/eot .eot
AddType font/otf .otf
AddType font/woff .woff
# Security Control
Order Allow,Deny
Deny from all
# Cache Control
Header set Cache-Control "max-age=604800, public"
# Gzip Control
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE image/jpg
AddOutputFilterByType DEFLATE image/png
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/javascript
RewriteEngine On
# Force HTTPS — applies to both essaybishops.com AND bishopswritingbureau.com
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteRule . - [E=REWRITEBASE:/]
RewriteBase /
# updates
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^updates/?$ prox-updates.php [L,QSA]
# order
RewriteRule ^order/?$ prox-order.php?view=order [L,QSA]
RewriteRule ^order-now/?$ prox-order.php?view=order [L,QSA]
RewriteRule ^place-order/?$ prox-order.php?view=order [L,QSA]
RewriteRule ^class-help/?$ prox-classhelp.php?view=classhelp [L,QSA]
RewriteRule ^inquiry/?$ prox-inquiry.php?view=inquiry [L,QSA]
# ── FIX 2: Dashboard rules — must use [L,QSA] and come before WordPress catch-all ──
RewriteRule ^dashboard/?$ prox-dashboard.php?view=orders [L,QSA]
RewriteRule ^dashboard/([^/]+)/?$ prox-dashboard.php?view=$1 [L,QSA]
RewriteRule ^dashboard/([^/]+)/([^/]+)/?$ prox-dashboard.php?view=$1&action=$2 [L,QSA]
RewriteRule ^dashboard/([^/]+)/([^/]+)/([^/]+)/?$ prox-dashboard.php?view=$1&action=$2 [L,QSA]
# ── END FIX 2 ────────────────────────────────────────────────────────────────────
# papers
RewriteRule ^papers/?$ prox-papers.php?do=listPapers [L,QSA]
RewriteRule ^papers/download/([^/]+)/?$ prox-papers.php?do=download&file_id=$1 [L,QSA]
RewriteRule ^papers.xml/?$ prox-papers.php?do=sitemap [L,QSA]
RewriteRule ^paper/([^/]+)/?$ prox-papers.php?slug=$1&do=showPaper [L,QSA]
# Checkout
RewriteRule ^checkout/([^/]+)/([^/]+)/([^/]+)/?$ prox-checkout.php?paymentMethod=$1&paymentNodeType=$2&paymentNodeId=$3 [L,QSA]
# Payment
RewriteRule ^payment/([^/]+)/([^/]+)/?$ prox-payment.php?paymentMethod=$1&status=$2 [L,QSA]
RewriteRule ^payment/([^/]+)/?$ prox-payment.php?paymentMethod=paypal&paymentNodeType=$1 [L,QSA]
RewriteRule ^install/?$ prox-install.php [L,QSA]
# 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.
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# ── FIX 3: Exclude portal app paths from WordPress catch-all ─────────────────
RewriteCond %{REQUEST_URI} !^/(dashboard|order$|order-now|place-order|class-help|inquiry|papers|checkout|payment|install|updates)(/|$) [NC]
# ── END FIX 3 ────────────────────────────────────────────────────────────────
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
# Fix $HTTP_RAW_POST_DATA deprecated warning
php_value always_populate_raw_post_data -1
# enable hiding .php extension
# ── FIX 4: Added RewriteEngine On ────────────────────────────────────────────
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)$ $1.php
# ── END FIX 4 ────────────────────────────────────────────────────────────────
order allow,deny
allow from all
# BEGIN cPanel-generated php ini directives, do not edit
php_value memory_limit -1
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_flag display_errors Off
php_value max_execution_time 300
php_value max_input_time 600
php_value max_input_vars 1000
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php80"
php_flag zlib.output_compression Off
php_value memory_limit -1
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_flag display_errors Off
php_value max_execution_time 300
php_value max_input_time 600
php_value max_input_vars 1000
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php80"
php_flag zlib.output_compression Off
# END cPanel-generated php ini directives, do not edit
# BEGIN LiteSpeed
SetEnv noabort 1
# END LiteSpeed
# ── Blog/special-page redirects scoped per domain ────────────────────────────
RewriteCond %{HTTP_HOST} ^essaybishops\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.essaybishops\.com$
RewriteRule ^blog$ "https\:\/\/www\.colapapers\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^essaybishops\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.essaybishops\.com$
RewriteRule ^dissertation\-help$ "https\:\/\/homeworkacetutors\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^bishopswritingbureau\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.bishopswritingbureau\.com$
RewriteRule ^blog$ "https\:\/\/essaybishops\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^tropicalessays\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.tropicalessays\.com$
RewriteRule ^blog$ "https\:\/\/essaybishops\.com\/" [R=301,L]
# ── END per-domain redirects ──────────────────────────────────────────────────
# BEGIN cPanel-generated php ini directives, do not edit
php_value memory_limit -1
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_flag display_errors Off
php_value max_execution_time 300
php_value max_input_time 600
php_value max_input_vars 1000
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php74"
php_flag zlib.output_compression Off
php_value memory_limit -1
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_flag display_errors Off
php_value max_execution_time 300
php_value max_input_time 600
php_value max_input_vars 1000
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php74"
php_flag zlib.output_compression Off
# END cPanel-generated php ini directives, do not edit
deny from 43.0.0.0/8
deny from 116.179.33.21
deny from 116.179.33.0/24
# php -- BEGIN cPanel-generated handler, do not edit
# Set the "ea-php74" package as the default "PHP" programming language.
AddHandler application/x-httpd-ea-php74 .php .php7 .phtml
# php -- END cPanel-generated handler, do not edit