Back to blog
Guide September 25, 2026

How to Fix 'Client denied by server configuration' (AH01630 / 403) in Apache 2.4

Automate WhatsApp Alerts
Start Free āž”

When browsing a web application hosted on Apache HTTP Server 2.4, requests frequently fail with HTTP 403 Forbidden. In Apache's error logs, the rejection is accompanied by one of two core authorization errors:

[authz_core:error] [pid 1234:tid 5678] [client 203.0.113.10:54321] AH01630: client denied by server configuration: /var/www/html/index.php
[access_compat:error] [pid 1234:tid 5678] [client 203.0.113.10:54321] AH01797: client denied by server configuration: /var/www/html/.htaccess

The error message specifically states that access was denied by "server configuration", not the underlying filesystem. While Unix file permissions (chmod / chown) and SELinux contexts can prevent Apache from reading files on disk, AH01630 indicates that Apache's own authorization engine (mod_authz_core) evaluated the request and explicitly denied access.

This guide details the architectural authorization shift between Apache 2.2 and 2.4, provides step-by-step fixes for <Directory>, .htaccess, SELinux, and reverse proxies, and outlines automated monitoring workflows.

[!TIP] Free Diagnostic Tools for Webmasters & SREs:


1. Architectural Root Cause: The Apache 2.2 to 2.4 Migration

The most frequent trigger for AH01630 is deploying legacy Apache 2.2 access control syntax (Order, Allow, Deny) onto an Apache 2.4 server without configuring modern Require directives.

                    APACHE 2.4 AUTHORIZATION PIPELINE
 ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
 │ 1. Inbound HTTP Request Received                       │
 ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                            │
                            ā–¼
 ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
 │ 2. Match VirtualHost & Location Directives             │
 ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                            │
                            ā–¼
 ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
 │ 3. Evaluate <Directory> & .htaccess Authorization      │
 ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                            │
                            ā–¼
              ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
              │ mod_authz_core Decision?  │
              ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                     │              │
             Require all granted   Require all denied / No match
                     │              │
                     ā–¼              ā–¼
           ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
           │ Check OS / Unix  │  │ āŒ ABORT: HTTP 403 Forbidden    │
           │ Filesystem Perms │  │ Log: AH01630 client denied      │
           ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

In Apache 2.4, access control is managed by mod_authz_core using provider-based Require rules. If an upgraded server lacks a matching Require all granted directive, Apache's secure default (Require all denied) halts the request before reading files on disk.


2. Comparative Matrix: Apache 2.2 vs Apache 2.4 Directives

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ Authorization Scenario       │ Legacy Apache 2.2 Syntax      │ Modern Apache 2.4 Syntax      │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Grant Access to Everyone     │ Order allow,deny              │ Require all granted           │
│                              │ Allow from all                │                               │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Deny Access to Everyone      │ Order deny,allow              │ Require all denied            │
│                              │ Deny from all                 │                               │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Restrict by Single IP        │ Order deny,allow              │ Require ip 192.168.1.50       │
│                              │ Deny from all                 │                               │
│                              │ Allow from 192.168.1.50       │                               │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Restrict by Subnet / CIDR    │ Allow from 10.0.0.0/24        │ Require ip 10.0.0.0/24        │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Combining Access Logic       │ Complex Order mixing          │ <RequireAll> / <RequireAny>   │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Underlying Core Module       │ mod_authz_host                │ mod_authz_core                │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Boolean Authorization Logic in Apache 2.4

Apache 2.4 allows complex combinatorial authorization logic using container directives:

$$\text{Access}{\text{RequireAll}} = \bigwedge{i=1}^n \text{Condition}_i \quad \text{(Logical AND: All conditions must pass)}$$

$$\text{Access}{\text{RequireAny}} = \bigvee{i=1}^n \text{Condition}_i \quad \text{(Logical OR: Any condition may pass)}$$


3. Step-by-Step Fixes for AH01630

1. Fix the <Directory> Block in VirtualHost Configuration

Open your site configuration file (e.g., /etc/apache2/sites-available/example.conf or /etc/httpd/conf.d/example.conf) and replace legacy 2.2 directives with Require all granted:

# āŒ BROKEN: Legacy Apache 2.2 syntax triggers AH01630 on Apache 2.4
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
# āœ… FIXED: Production-ready Apache 2.4 configuration
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

2. Resolve Root Filesystem Lockdown Conflicts

Default Apache distributions (such as Debian's /etc/apache2/apache2.conf or RHEL's /etc/httpd/conf/httpd.conf) enforce root filesystem lockdown:

# Global root lockdown (DO NOT REMOVE)
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

[!CAUTION] Never change <Directory /> to Require all granted. Doing so exposes system files like /etc/passwd to web exploits. Instead, explicitly declare Require all granted for your specific document root (e.g., <Directory /var/www/html>).


3. Fix Conflicting .htaccess Directives

If AllowOverride All is active, rules inside .htaccess can override your virtual host declarations:

  1. Search for .htaccess files:

    find /var/www/html -name ".htaccess"
    
  2. Inspect for legacy or explicit deny rules:

    # āŒ BROKEN in .htaccess:
    Order deny,allow
    Deny from all
    
    # āœ… FIXED:
    Require all granted
    
  3. Protect Sensitive Files Safely:

    # āœ… Securely block access to .env and config files only
    <FilesMatch "^\.(env|git|htaccess|ini)$">
        Require all denied
    </FilesMatch>
    

4. Fix Linux Filesystem Permissions & Directory Traversal

Apache must have read (r) and execute (x) traversal permissions on every parent directory leading to the target file:

# 1. Audit path traversal permissions
namei -l /var/www/html/index.php

Ensure directories have 755 permissions and files have 644:

# 2. Fix directory and file permissions
sudo chown -R www-data:www-data /var/www/html    # Debian / Ubuntu
# sudo chown -R apache:apache /var/www/html      # RHEL / Rocky Linux

sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

5. Fix SELinux Contexts (RHEL / Rocky / AlmaLinux / CentOS)

On SELinux-enforcing systems, Apache cannot read files if they lack the httpd_sys_content_t security context:

# 1. Inspect SELinux security labels
ls -laZ /var/www/html

# 2. Restore default httpd security contexts
sudo restorecon -Rv /var/www/html

# 3. For custom web directories outside /var/www:
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/myapp/public(/.*)?"
sudo restorecon -Rv /srv/myapp/public

6. Fix Reverse Proxy <Proxy> Authorization

When using Apache as a reverse proxy, mod_proxy requires authorization inside a <Proxy> container:

# āœ… Production Reverse Proxy Authorization
<VirtualHost *:80>
    ServerName api.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass        / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    <Proxy "*">
        Require all granted
    </Proxy>
</VirtualHost>

4. Validation Commands & Syntax Testing

Execute this verification sequence after updating your configuration:

# 1. Test Apache configuration syntax
sudo apachectl configtest

Expected Output: Syntax OK

# 2. Confirm authorization modules are loaded
apachectl -M | grep -E 'authz_core|authz_host'

# 3. Inspect virtual host bindings
sudo apachectl -S

# 4. Gracefully reload Apache
sudo systemctl reload apache2   # Debian / Ubuntu
# sudo systemctl reload httpd   # RHEL / Rocky Linux

# 5. Test HTTP 200 response via cURL
curl -vI http://example.com/
flowchart TD
    A["Client Request: HTTP 403 Forbidden"] --> B{"Check /var/log/apache2/error.log"}
    B -- "AH01630: client denied" --> C{"Has 'Require all granted' in <Directory>?"}
    C -- "No / Uses 2.2 syntax" --> D["Add 'Require all granted' & reload Apache"]
    C -- "Yes" --> E{"Check .htaccess files"}
    E -- "Deny rule present" --> F["Remove 'Require all denied' from .htaccess"]
    E -- "Clean" --> G{"Check SELinux / Permissions"}
    G -- "SELinux context wrong" --> H["Run: restorecon -Rv /var/www/html"]
    G -- "Perms wrong" --> I["Run: chmod 755 for dirs, chmod 644 for files"]

5. Proactive HTTP Status & Endpoint Monitoring

Authorization regressions and 403 Forbidden errors commonly occur during automated deployments, CMS updates, or server migrations.

Continuous synthetic monitoring ensures your SRE team is instantly notified before users encounter broken authorization pages.

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ Monitoring Check                │ Operational Benefit                       │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ HTTP Status Code Validation     │ Instantly catches 403 Forbidden errors    │
│ Multi-Region Uptime Checks      │ Tests global access across 15+ nodes      │
│ Response Time Telemetry         │ Tracks TTFB and server processing latency │
│ Real-Time Alert Channels        │ Instant notifications via WhatsApp/Slack  │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Pingzo Monitoring Plans & Features

Feature / PlanFreeStarter ($5/mo)Pro ($12/mo)Agency ($29/mo)
Monitors Included1 Monitor10 MonitorsUnlimitedUnlimited
Check Frequency15 Minutes5 Minutes2 Minutes1 Minute
HTTP Status Code ChecksIncludedIncludedIncludedIncluded
Alert ChannelsEmailWhatsApp, Slack, TelegramWhatsApp, Slack, SMSMulti-Team Routing
Response Time Telemetry24 Hours30 Days90 Days365 Days
Custom Status PagesPingzo BrandedBrandedCustom DomainWhite-Label

Summary Troubleshooting Checklist

  1. Migrate 2.2 Directives: Replace Order allow,deny / Allow from all with Require all granted.
  2. Audit .htaccess: Inspect for restrictive Require all denied or Deny from all rules.
  3. Verify Permissions: Ensure directories are 755 (drwxr-xr-x) and owned by www-data or apache.
  4. Fix SELinux: Run restorecon -Rv /var/www/html to ensure httpd_sys_content_t context.
  5. Reload & Verify: Run sudo apachectl configtest && sudo systemctl reload apache2.

šŸ‘‰ Monitor Your HTTP Endpoints & Response Codes with Pingzo — Set up automated uptime and HTTP status monitors with instant WhatsApp alerts in under 3 minutes.

Zero-Code Uptime Alerts

Stop Finding Out About Outages from Angry Users

Get instant WhatsApp & Discord alerts the second your API, website, or server goes down. Setup in 30 seconds with 60-second checks.

WhatsApp & Discord 60-Second Checks Free Forever Plan
Try Pingzo Free

Know before your users do

Connect official WhatsApp notification channels, Discord webhooks, Telegram bots, and public status pages. Start in 30 seconds.

Create Free Monitor