Improve diagnosis: check .htaccess even when error_log exists

Problem: Only diagnosing 4 unique issues out of 7555 errors because script
was only checking .htaccess when error_log didn't exist. Most errors had
error_log files but no matching PHP errors, so fell through to
"NO_PHP_ERROR_LOGGED" without further investigation.

Solution: Added fallback .htaccess checking in two scenarios:
1. When error_log exists but has no matching errors for this URL
2. When error_log exists but grep finds no relevant PHP errors

Now checks for common .htaccess issues in all cases:
- Invalid php_value/php_flag directives (incompatible with FPM)
- Malformed RewriteRule syntax

This should dramatically increase the number of diagnosed issues by catching
.htaccess problems even when PHP error_log exists.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cschantz
2025-11-03 21:34:22 -05:00
parent 7c19a2b3a5
commit a13c324d8e
+58
View File
@@ -348,12 +348,70 @@ while IFS='|' read -r domain user status url timestamp ip; do
echo "$cause|$diagnosis" >> "$DETAILED_DIAGNOSIS"
((diagnosed_causes["$cause"]++))
[ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis"
else
# No matching error in error_log - check .htaccess as fallback
if [ "$user" != "unknown" ] && [ -f "$docroot/.htaccess" ]; then
htaccess_file="$docroot/.htaccess"
htaccess_issues=""
# Check for invalid PHP directives
if grep -qE "^[[:space:]]*(php_value|php_flag|php_admin_value|php_admin_flag)" "$htaccess_file" 2>/dev/null; then
if ! apache2ctl -M 2>/dev/null | grep -q "php.*module"; then
htaccess_issues="PHP directives (php_value/php_flag) incompatible with current PHP handler (not mod_php)"
fi
fi
# Check for malformed RewriteRule
bad_rewrite=$(grep -nE "RewriteRule.*\[.*[^]]*$" "$htaccess_file" 2>/dev/null | head -1)
if [ -n "$bad_rewrite" ]; then
htaccess_issues="${htaccess_issues:+$htaccess_issues; }Malformed RewriteRule: $bad_rewrite"
fi
if [ -n "$htaccess_issues" ]; then
cause="HTACCESS_ERROR"
diagnosis="$domain$url - .htaccess error: $htaccess_issues"
echo "$cause|$diagnosis" >> "$DETAILED_DIAGNOSIS"
((diagnosed_causes["$cause"]++))
[ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis"
else
((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++))
fi
else
((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++))
fi
fi
else
# No error in error_log at all - check .htaccess
if [ "$user" != "unknown" ] && [ -f "$docroot/.htaccess" ]; then
htaccess_file="$docroot/.htaccess"
htaccess_issues=""
# Check for invalid PHP directives
if grep -qE "^[[:space:]]*(php_value|php_flag|php_admin_value|php_admin_flag)" "$htaccess_file" 2>/dev/null; then
if ! apache2ctl -M 2>/dev/null | grep -q "php.*module"; then
htaccess_issues="PHP directives (php_value/php_flag) incompatible with current PHP handler (not mod_php)"
fi
fi
# Check for malformed RewriteRule
bad_rewrite=$(grep -nE "RewriteRule.*\[.*[^]]*$" "$htaccess_file" 2>/dev/null | head -1)
if [ -n "$bad_rewrite" ]; then
htaccess_issues="${htaccess_issues:+$htaccess_issues; }Malformed RewriteRule: $bad_rewrite"
fi
if [ -n "$htaccess_issues" ]; then
cause="HTACCESS_ERROR"
diagnosis="$domain$url - .htaccess error: $htaccess_issues"
echo "$cause|$diagnosis" >> "$DETAILED_DIAGNOSIS"
((diagnosed_causes["$cause"]++))
[ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis"
else
((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++))
fi
else
((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++))
fi
fi
else
# No error log found - check .htaccess and permissions thoroughly
if [ "$user" != "unknown" ]; then