Major improvements to provide actionable, specific diagnostics instead of generic advice:
- Add bot/scanner filtering to reduce noise (monitors, SEO tools, security scanners, HTTP clients)
- Track and display filtered bot count in summary
- Remove all emojis from output
- Fix ANSI escape codes with echo -e for proper color rendering
Comprehensive file/permission validation:
- Resolve URLs to actual file paths being requested
- Test .htaccess readability by Apache (nobody user)
- Validate .htaccess syntax with apache2ctl -t
- Detect invalid PHP directives (php_value/php_flag without mod_php)
- Find malformed RewriteRule and orphaned RewriteCond
- Check document root and specific file permissions
- Test if files are readable by Apache user
Enhanced error extraction:
- Extract exact file paths from PHP errors
- Get line numbers for syntax errors
- Extract function names for missing function errors
- Get database usernames/names from DB errors
- Show current memory limits for memory exhaustion
- Identify specific files with permission issues
Add detailed per-URL diagnostics section:
- Show domain + URL + specific issue + file path + exact problem
- Group by error type with up to 20 examples per type
- Examples: "example.com/wp-admin - Permission denied on: /home/user/wp-config.php (perms: 600, owner: root:root) - NOT readable by Apache"
ISSUE: Example text was showing raw ANSI codes like:
\033[2mExample: domain.com...\033[0m
FIX: Added DIM and BOLD color variable definitions
- These weren't being loaded from common-functions.sh
- Now examples display properly with dim gray text
FILTERED LOG FILES:
- proxy (Apache reverse proxy logs)
- localhost (local connections)
- default (default vhost)
- cpanel, webmail, whm (cPanel services)
- cpcalendars, cpcontacts, webdisk (cPanel apps)
These are cPanel system services, not actual customer domains.
They were showing as 'unknown' user and cluttering results.
Now only tracks actual customer domain 500 errors.
IMPROVED ERROR LOG DETECTION:
- Now checks 5 different locations for error logs:
• /home/USER/public_html/error_log
• /home/USER/logs/error_log
• /home/USER/error_log
• /var/log/apache2/domlogs/DOMAIN-error_log
• /usr/local/apache/domlogs/DOMAIN
- Increased tail from 100 to 500 lines for better error capture
NEW .HTACCESS DETECTION:
- If no error_log found, checks for .htaccess file
- Looks for RewriteRules, php_value, php_flag directives
- If found, classifies as 'HTACCESS_LIKELY' instead of 'NO_ERROR_LOG_FILE'
- Provides specific .htaccess troubleshooting steps
BETTER ROOT CAUSE CATEGORIES:
- HTACCESS_LIKELY: Has .htaccess with rules, likely syntax error
- NO_ERROR_LOG_FILE: Checked all locations, truly not found
- NO_PHP_ERROR_LOGGED: Error log exists but empty (Apache/config issue)
This should catch most of the 'NO_ERROR_LOG_FILE' cases and
correctly identify them as .htaccess syntax errors.
NEW SCRIPT: modules/website/500-error-tracker.sh
- FAST-ONLY 500 error detection (no menus, no options)
- Scans access logs for 500 errors
- Maps domains to cPanel usernames
- Automatically diagnoses root causes by checking error_log files
- Shows actual PHP errors causing the 500s
ROOT CAUSE DETECTION:
- PHP Memory Exhausted (shows current limit)
- PHP Fatal Errors
- PHP Syntax Errors
- Missing PHP Functions/Extensions
- Database Connection Failures
- .htaccess Issues
- Shows ACTUAL error examples, not just suggestions
FIXES:
- Fixed awk error in website-error-analyzer.sh:
• Changed "next" in END block to "if (length > 0)"
• "next" cannot be used in END block in awk
- Added option 2 in Website Management menu
- Renumbered all WordPress tools (3-16)
DIFFERENCE FROM FULL ANALYZER:
Full Analyzer: All errors, filters, time ranges, user choices
Fast Tracker: ONLY 500s, auto-diagnosis, shows WHY not suggestions
Use Fast Tracker when you need to quickly find which domains
are getting 500 errors and the exact PHP errors causing them.