{"id":6185,"date":"2026-08-14T10:14:23","date_gmt":"2026-08-14T07:14:23","guid":{"rendered":"https:\/\/www.scalahosting.com\/kb\/?p=6185"},"modified":"2026-08-14T10:14:24","modified_gmt":"2026-08-14T07:14:24","slug":"modsecurity-per-domain-spanel","status":"publish","type":"post","link":"https:\/\/www.scalahosting.com\/kb\/modsecurity-per-domain-spanel\/","title":{"rendered":"How to Enable or Disable ModSecurity for One Domain in SPanel"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">SPanel lets you turn ModSecurity on or off for a single domain from the domain&#8217;s <strong>Settings <\/strong>dialog, using the Mod_security ON\/OFF toggle. The setting applies only to the domain you edit, so you can disable the WAF on one site that hits a false positive without touching the others on your account. ModSecurity is ON by default, and disabling it removes a protection layer &#8211; so use it to debug a false positive and turn it back on once you have a fix.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Who this is for<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is for developers and site owners who run a legitimate request &#8211; a form post, a file upload, an API call &#8211; and get a 403 error from the web application firewall. You suspect the rule is wrong for this site and want to confirm that before rewriting the request, without weakening the other domains under the same SPanel account.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What problem this solves<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A ModSecurity rule that fires on bad traffic can also fire on traffic that is fine for your app &#8211; think of a page builder, an import tool, or a webhook posting content the WAF reads as an attack. Without a per-domain control you would either live with the block or ask for an account-wide change that exposes every other site. The toggle narrows the blast radius: you change one domain, prove the WAF was the cause, and leave the rest protected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How SPanel solves this<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The control lives in each domain&#8217;s Settings dialog. In SPanel, go to <strong>Domains<\/strong>, find the domain&#8217;s row, open the <strong>Actions<\/strong> menu, and choose <strong>Settings<\/strong>. Inside that dialog is a <strong>Mod_security<\/strong> ON\/OFF toggle (the UI spells it Mod_security). It applies to that one domain only, and the default state is ON.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To change it, flip the toggle and <strong>Save<\/strong>. The dialog then reflects the new state, and the change takes effect for incoming requests to that domain &#8211; there is no separate restart step. Rule-level tuning &#8211; switching off one specific rule rather than the whole engine &#8211; is not exposed here and may require admin-level access.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why this is different in SPanel<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Two things are worth calling out. First, the toggle is genuinely per-domain: disabling the WAF for one site that trips a false positive leaves every other domain on the account protected, so you are not making an account-wide trade-off to fix one site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Second, the toggle sits in the same Settings dialog as the document root and hotlink protection controls, so the per-domain settings you reach for most often are in one place rather than spread across separate screens.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Before you start<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Access to the SPanel User Interface for the account that owns the domain.<\/li>\n\n\n\n<li>The correct domain in mind &#8211; the toggle changes only the domain whose Settings you opened.<\/li>\n\n\n\n<li>An understanding of the trade-off: turning Mod_security OFF removes a protection layer for that domain until you turn it back on.<\/li>\n\n\n\n<li>A plan to re-enable it, ideally a specific request to retest, so the WAF does not stay off longer than the debugging window.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step-by-step<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the <strong>Actions<\/strong> drop-down menu and select <strong>Settings<\/strong>. You should see the per-domain controls, including the <strong>Mod_security<\/strong> toggle.<\/li>\n\n\n\n<li>In SPanel, open <strong>Domains<\/strong> and find the row for the domain you want to change, for example yoga.life.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large mpg-gallery\"><img decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/08\/01-settings-modsec-1024x640.webp\" alt=\"How to Enable or Disable ModSecurity for One Domain in SPanel, Step-by-step\" class=\"wp-image-6186\" srcset=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/08\/01-settings-modsec-1024x640.webp 1024w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/08\/01-settings-modsec-300x188.webp 300w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/08\/01-settings-modsec-768x480.webp 768w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/08\/01-settings-modsec.webp 1440w\" sizes=\"(max-width: 361px) 660px, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 910px, 1140px\" \/><\/figure>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Safety check before you disable: confirm this is the right domain and that you intend to remove WAF protection for it. Turning Mod_security OFF leaves the site without the firewall layer until you re-enable it.<\/li>\n\n\n\n<li>Flip the <strong>Mod_security<\/strong> toggle to OFF to disable the WAF, or to ON to re-enable it. The default is ON.<\/li>\n\n\n\n<li>Click <strong>Save<\/strong>. The dialog should now show the toggle in its new position, and the change applies to requests to that domain.<\/li>\n\n\n\n<li>Retest the blocked request. If it now succeeds with the WAF off, you have confirmed ModSecurity was the cause. Turn the toggle back ON and Save once you have a longer-term fix.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What happens behind the scenes<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The toggle enables or disables the ModSecurity engine for that domain&#8217;s web server configuration. SPanel applies the change for you, so you do not edit a config file or restart a service by hand. Because the setting is scoped to the single domain, the result is a controlled test: you isolate one variable &#8211; the WAF &#8211; for one site, with no account-wide side effects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Limitations and edge cases<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Disabling the WAF removes a protection layer.<\/strong> With Mod_security OFF, that domain no longer gets firewall filtering. Only disable it to debug a false positive, then re-enable it as soon as you have a fix.<\/li>\n\n\n\n<li><strong>The control is per-domain, not per-URL or per-rule.<\/strong> You cannot turn the WAF off for a single page or a single rule from this dialog &#8211; it is the whole engine for the whole domain. If only one rule is the problem, plan for a narrower fix rather than leaving the engine off.<\/li>\n\n\n\n<li><strong>Individual rule tuning may require admin-level access<\/strong>. Switching off a specific rule is not part of this per-domain toggle, so you may need to escalate to whoever administers the server.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Troubleshooting<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-regular green-rows\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Symptom<\/strong><\/td><td><strong>Likely cause<\/strong><\/td><td><strong>What to do<\/strong><\/td><\/tr><tr><td>Request still blocked after turning off ModSecurity<\/td><td>Edited the wrong domain&#8217;s Settings<\/td><td>Reopen Domains, confirm the row, and check the toggle in that domain&#8217;s dialog<\/td><\/tr><tr><td>403 returns even with WAF off<\/td><td>The block is not coming from ModSecurity<\/td><td>Re-enable the WAF and look at app logs, permissions, or other rules<\/td><\/tr><tr><td>Want to disable just one rule<\/td><td>Per-domain toggle covers the whole engine<\/td><td>Ask the server administrator about rule-level tuning<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When to use this \/ when not to use this<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-regular green-rows\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Use this when<\/strong><\/td><td><strong>Skip or use something else when<\/strong><\/td><\/tr><tr><td>A legitimate request on one site is blocked by the WAF<\/td><td>You want protection off for every domain at once<\/td><\/tr><tr><td>You need to confirm ModSecurity is the cause of a 403 error<\/td><td>You only need one specific rule disabled<\/td><\/tr><tr><td>You can re-enable the WAF promptly after testing<\/td><td>The site handles sensitive data and cannot run unprotected<\/td><\/tr><tr><td>You want to isolate one domain without touching others<\/td><td>The block is clearly an app bug, not the WAF<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQ<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Does turning off Mod_security affect my other domains?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> No. The toggle is per-domain and changes only the domain whose Settings you opened. Other domains remain protected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Is ModSecurity on or off by default?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> It is ON by default. You have to open the Settings dialog and change the toggle to disable it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Can I disable the WAF for just one page or URL?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> No. This control is per-domain, not per-URL or per-rule &#8211; it enables or disables the engine for the whole domain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>How do I turn protection back on?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Open the same domain&#8217;s Settings dialog, flip the Mod_security toggle to ON, and click Save. Re-enable it as soon as your debugging is done.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Can I turn off a single ModSecurity rule instead of the whole engine?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Rule-level tuning may require admin-level access; ask the server administrator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>My request is still blocked after disabling the WAF. Now what?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Confirm you edited the correct domain. If the block persists, the cause is likely elsewhere &#8211; re-enable the WAF and check your application logs and permissions.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n    {\n      \"@context\": \"https:\/\/schema.org\",\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [{\n        \"@type\": \"Question\",\n        \"name\": \"Does turning off Mod_security affect my other domains?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"No. The toggle is per-domain and changes only the domain whose Settings you opened. Other domains remain protected.\"\n        }\n      }, {\n        \"@type\": \"Question\",\n        \"name\": \"Is ModSecurity on or off by default?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"It is ON by default. You have to open the Settings dialog and change the toggle to disable it.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Can I disable the WAF for just one page or URL?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"No. This control is per-domain, not per-URL or per-rule - it enables or disables the engine for the whole domain.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"How do I turn protection back on?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Open the same domain's Settings dialog, flip the Mod_security toggle to ON, and click Save. Re-enable it as soon as your debugging is done.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Can I turn off a single ModSecurity rule instead of the whole engine?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Rule-level tuning may require admin-level access; ask the server administrator.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"My request is still blocked after disabling the WAF. Now what?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Confirm you edited the correct domain. If the block persists, the cause is likely elsewhere - re-enable the WAF and check your application logs and permissions.\"\n        }\n      }]\n    }\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>SPanel lets you turn ModSecurity on or off for a single domain from the domain&#8217;s Settings dialog, using the Mod_security ON\/OFF toggle. The setting applies only to the domain you edit, so you can disable the WAF on one site that hits a false positive without touching the others on your account. ModSecurity is ON [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_titles_title":"Disable ModSecurity for One Domain in SPanel | ScalaHosting KB","_seopress_titles_desc":"Enable or disable ModSecurity for a single domain in SPanel. Use the per-domain toggle to debug a 403 false positive, leaving your other sites protected.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[66],"tags":[],"class_list":["post-6185","post","type-post","status-publish","format-standard","hentry","category-tutorials"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/comments?post=6185"}],"version-history":[{"count":1,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6185\/revisions"}],"predecessor-version":[{"id":6187,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6185\/revisions\/6187"}],"wp:attachment":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/media?parent=6185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/categories?post=6185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/tags?post=6185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}