Recommended Free Tools
AH00112 means Apache has loaded a DocumentRoot that does not exist in the filesystem namespace where httpd is running. Fix it by finding the active virtual host and directive, checking the exact path (including case, symlinks, mounts and container boundaries), then either changing the directive to the intended existing directory or creating the configured directory. Match the path with a <Directory> access rule, correct ownership and permissions, run a syntax check, reload Apache, and confirm the error log and a real HTTP request are clean.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
What AH00112 means
The startup warning normally looks like AH00112: Warning: [DocumentRoot] /some/path does not exist. Apache is not saying that the web server executable is missing. It is reporting that a configured filesystem directory cannot be found when the configuration is read.
As an Amazon Associate I earn from qualifying purchases.
DocumentRoot is the directory from which a virtual host serves files. For a request such as /images/logo.png, Apache combines the URL path with that root and looks for a file under the resulting filesystem path. A virtual host can define its own root, so one stale site configuration can produce AH00112 even when the default site is correct.
A valid directory is necessary but not sufficient for a working site. The directory can still be inaccessible because of a missing <Directory> rule or filesystem permissions, and a request can still return 404 when the requested file is not present.
First: capture the warning and identify the affected virtual host
Copy the complete path shown between the warning text and the end of the line. Do not normalize it by hand: capitalization, escaped characters, symlink components and mount points can all matter.
Find every configured DocumentRoot
Search the configuration tree used by your distribution, including files pulled in with Include or IncludeOptional. The common locations below are examples, not universal paths:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
rg -n "^[[:space:]]*DocumentRoot[[:space:]]" /etc/apache2 /etc/httpd 2>/dev/null
If rg is unavailable, use an equivalent recursive text search such as grep -Rni. Inspect the main configuration file to learn which directories are actually included; searching an unused directory can lead you to a file Apache never loads.
Determine the active virtual host
Use the configuration-dump command supplied by your build to see which virtual hosts are enabled and which file defines each one. On many installations, the command is:
apachectl -S
Other packages expose the same check through httpd -S. The output lists listening addresses, server names and the configuration filename and line number associated with each host. Follow that filename, then inspect the surrounding <VirtualHost> block. A fix applied only to the default host will not remove a warning generated by another enabled site.
Rank #2
- Used Book in Good Condition
Check the effective configuration before editing
Configuration files can be layered, and a later include may override an earlier value. Read the relevant include chain and note whether the directive is inside a virtual host. Keep a record of the original file and line number so the change can be reverted safely.
Verify the path exactly as Apache sees it
Do not rely only on a graphical file browser or a host-level shell. Apache may run in a container, chroot, mount namespace or other restricted filesystem view. A path that exists on the host can be absent inside the environment where httpd starts.
Check existence, type and spelling
ls -ld /absolute/path/to/site
test -d /absolute/path/to/site && echo exists || echo missing
Confirm all of the following:
- The spelling and capitalization match the directive. Case-sensitive filesystems treat
/Siteand/siteas different directories. - Every parent directory exists and is a directory, not a regular file.
- A symlink in the path points to a target that still exists and is visible to the Apache process.
- A mounted volume is mounted before Apache starts and is present in the same runtime namespace.
- The path is visible from the service’s container or chroot, rather than only from the host.
Account for relative paths
The core configuration reference treats a relative directory path as relative to Apache’s ServerRoot. That can differ from the shell’s current directory and from the directory you expected during deployment. An absolute path makes the location auditable and avoids this ambiguity. If you must retain a relative value, resolve it against the effective ServerRoot shown by the loaded configuration and verify that resulting directory.
Test as the service account
Existence and access are separate checks. On systems that use a dedicated account, run a read or directory test as that account (the name varies by distribution):
sudo -u www-data test -r /absolute/path/to/site/index.html && echo readable
sudo -u www-data test -x /absolute/path/to/site && echo traversable
Substitute the account configured by your installation. A successful root-user test does not prove that Apache can traverse every parent directory.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Choose the correct fix
There are two legitimate primary corrections. Pick based on where the site is supposed to live, not merely on how to silence the warning.
| Correction | Use it when | Main risk | Rollback and maintenance |
|---|---|---|---|
Change DocumentRoot to an existing absolute directory |
The deployment was moved, renamed, or the configuration contains a typo; the intended files already live elsewhere. | A typo in the replacement can make the virtual host serve the wrong site’s content. | Usually easy to revert by restoring the original line. The path must remain stable across future releases. |
| Create the configured directory and deploy the site there | The configured path is the deliberate release location and should be retained. | An empty or wrong directory can make the server start while returning 404s or exposing unintended files. | Keep the directory in deployment automation and apply the required ownership and access rules. |
| Use a symlink to the intended release directory | Your deployment process deliberately uses a stable root that points to versioned releases. | A broken link or link target outside the allowed filesystem can recreate the warning or create an access problem. | Document the target and update the link atomically; verify the target from Apache’s namespace. |
| Repair a container or mount definition | The directory exists on the host but not in the Apache container, chroot or mount namespace. | Mounting the wrong host directory can serve unrelated content. | Fix the runtime definition, then verify the mount after every restart. |
Changing the directive
Edit the DocumentRoot in the specific enabled virtual-host file identified by the dump. Use an absolute directory path and omit a trailing slash, as specified by Apache’s core reference:
DocumentRoot /srv/www/example
Do not change an unrelated default site simply because it is easier to find. If several virtual hosts contain the missing path, correct each intentional occurrence or disable the obsolete site configuration.
Creating the configured directory
Create only the directory you intend to publish, then deploy the expected index and assets:
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorssudo install -d -o www-data -g www-data /srv/www/example
sudo install -o www-data -g www-data index.html /srv/www/example/index.html
The account and group in this example are distribution-dependent. Preserve the ownership model used by the rest of the server; do not grant broad write access merely to make Apache start.
Match DocumentRoot with Directory access rules and permissions
Apache evaluates filesystem access using <Directory> sections. When you move a root, update or add a matching block for the new absolute path. A typical read-only static-site policy is:
<Directory "/srv/www/example">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
The exact options depend on the application. Require all granted allows HTTP access, while filesystem permissions still control whether the service account can traverse directories and read files. Check execute permission on every parent directory, read permission on files, and any mandatory access-control policy enforced by the operating system.
If the warning disappears but requests return 403, inspect the matching <Directory> rule, inherited rules, ownership, mode bits and security-policy denials. Do not solve a 403 by making the entire tree world-writable.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallValidate, reload and prove the fix
- Run a syntax test. Use the command available on your platform, commonly
apachectl -torhttpd -t. Fix every reported syntax error before attempting a reload. - Review the virtual-host map again. Run the corresponding
-Scheck and confirm that the edited file and path belong to the intended server name and listening address. - Reload through the service manager. Use the reload operation supplied by your operating system, such as the service manager’s Apache reload action. If a graceful reload is unavailable or fails, follow the distribution’s documented restart procedure.
- Read startup output and the error log. Confirm that AH00112 is gone and look for new permission, module, mount or configuration errors.
- Make a request to the affected host. Request the actual server name, not only localhost, and verify that the intended index file is returned. Test a known static asset and a deliberately missing URL to distinguish a working root from an absent file.
“As an Apache HTTP Server administrator, your most valuable assets are the log files, and, in particular, the error log. Troubleshooting any problem without the error log is like driving with your eyes closed.”
The warning is resolved only when the configured directory exists in Apache’s runtime view, the configuration loads without errors, the warning no longer appears, and a request reaches the intended content.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why Apache says the DocumentRoot is missing
| Cause | What you will see | What to inspect |
|---|---|---|
| Typo or renamed deployment directory | The warning path differs by one character, release name or capitalization from the real directory. | The directive, deployment manifest and directory listing. |
| Stale enabled virtual host | The default site works, but Apache still reports a path belonging to another enabled site. | The -S output, enabled-site links and every loaded DocumentRoot. |
| Relative-path resolution | The directory exists where you ran ls but not under the effective ServerRoot. |
ServerRoot, include context and the resolved absolute path. |
| Container, chroot or mount mismatch | The path exists on the host but is absent from the process’s namespace. | Container mounts, chroot settings and the path from inside the running environment. |
| Broken symlink | The configured name exists as a link, but its target is missing or unreachable. | ls -ld output, target path and mount availability. |
| Directory created but inaccessible | AH00112 disappears, then requests return 403 or Apache logs permission denials. | Matching <Directory> rules, parent-directory traversal, file modes and security policy. |
| Root exists but content does not | Apache starts, but the requested URL returns 404 or a directory-index error. | URL-to-file mapping, index-file settings and the deployed files. |
Commands you can adapt by platform
Package layouts and executable names differ. First inspect the service definition and loaded configuration; do not assume that /etc/apache2 or /etc/httpd is correct.
# Locate configured roots (adjust directories for your OS)
rg -n "^[[:space:]]*DocumentRoot[[:space:]]" /etc/apache2 /etc/httpd 2>/dev/null
# Verify a candidate directory
ls -ld /absolute/path/to/site
test -d /absolute/path/to/site && echo exists || echo missing
# Validate syntax
apachectl -t
# or
httpd -t
Use one syntax-check command, not both, unless your distribution provides both as wrappers. A command can report success while a different service unit loads another configuration, so correlate the command’s configuration path with the running service.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Special cases that need extra care
Several virtual hosts share the same bad path
Search all loaded files and make a list of each occurrence, including the server name beside it. Decide whether the sites should share a root or whether each requires its own directory. Correcting one occurrence does not alter the others.
Release directories and symlinks
A stable path such as /srv/www/current can point to a versioned release, but Apache must be able to follow the link and traverse the target. Check the link after deployment and after a reboot or mount change. If the target is replaced, test the virtual host before removing the previous release so rollback remains possible.
Containers and chroots
Inspect the path from inside the container or chroot that launches Apache. Ensure the volume is mounted at exactly the path named in DocumentRoot, is mounted before the service starts, and contains the expected files. Editing the host’s directory alone cannot fix a missing path inside the runtime namespace.
Aliases are not a substitute for a missing root
An Alias maps a URL prefix to another filesystem location, but it does not make a nonexistent DocumentRoot valid. Repair the root first; then use an alias only when the URL-to-filesystem mapping is an intentional part of the site’s design, with its own access rules.
Free tools Windows power users keep installed
One-click scans. No signup required.
Quick Recap
A final troubleshooting checklist
- Copied the exact path from AH00112.
- Located every loaded
DocumentRootand identified the responsible virtual host. - Confirmed the path in Apache’s runtime filesystem namespace.
- Resolved relative paths against the effective
ServerRoot, or replaced them with an audited absolute path. - Checked symlink targets, mounts, container paths and parent-directory traversal.
- Either corrected the directive or created the intended directory, without serving an unintended tree.
- Added or updated the matching
<Directory>rule and preserved least-privilege ownership. - Ran the platform’s syntax test before reload.
- Reloaded through the correct service manager and inspected startup output and the error log.
- Requested the affected hostname and verified the intended index and a known asset.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




