diff --git a/modules/website/500-error-tracker.sh b/modules/website/500-error-tracker.sh index 3a91231..758f242 100755 --- a/modules/website/500-error-tracker.sh +++ b/modules/website/500-error-tracker.sh @@ -349,10 +349,68 @@ while IFS='|' read -r domain user status url timestamp ip; do ((diagnosed_causes["$cause"]++)) [ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis" else - ((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++)) + # 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 - ((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++)) + # 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