If the above solutions don’t work, one thing you can try is to enable all your apache modules to make sure that there isn’t some module you need that somehow got accidentally disabled.
For example, how I found the cause of my problem was to replace all instances of #LoadModule with LoadModule in all my Apache config files. Since that solved the problem for me, therefore I knew that my problem was not a missing “KeepAlive” directive argument, but rather, my problem was a missing dependency.
Because, remember, .so files are basically static libraries. Having a module enabled does not mean it will get used, but having one disabled does mean that it can’t get used, and therefore, anything that depends on it will necessarily fail.
Note: this answer has received some down-votes due to the fact that my initial answer seemed to suggest leaving all the modules enabled, forever. While you could theoretically do that without necessarily breaking anything, it’s obviously not a best practice solution.
So, please understand, I am merely suggesting this as a troubleshooting step, not a final solution.
Also, please note: I use a special git project to track all of my local machine’s apache config files. That way I can do these sorts of global search-and-replace operations in my apache config working directory, as a troubleshooting step. If enabling all modules succeeds, then try disabling them again one-by-one and restarting apache in between, until you find which module it is that needs to remain enabled. Once you’ve figured that out, then reset the repo back to its original state, and only enable that one module that needs to remain enabled.
You will also find that using git to track your apache config files cleans up those directories, since you won’t be needing those old-fashioned .bak and .default files anymore.