.htaccess
Directory-level configuration file used by Apache HTTP Server
From Wikipedia, the free encyclopedia
An .htaccess (hypertext access) file is a directory-level configuration file supported by several web servers, used for configuration of website-access settings such as URL redirection, access control, and MIME type handling. The leading dot makes it a hidden file in Unix-like environments.

A site may contain more than one .htaccess file. The files are placed inside the web tree—inside directories and their subdirectories—which is why they are also called distributed configuration files.[1]
Each .htaccess file acts as a local override of the server's main configuration file (such as httpd.conf) for the directory it occupies and all subdirectories beneath it.[2]
The original purpose—reflected in the name—was per-directory access control, for example requiring a password to reach web content. In practice .htaccess files are now used to configure many other settings: content types, character encoding, CGI handlers, and URL rewriting rules.
History
The .htaccess file format originated with the NCSA HTTPd server, where it was introduced to let shared-hosting users control access to their own directories without modifying the server-wide configuration. When the Apache HTTP Server project was founded in 1995 as a continuation of NCSA HTTPd, it retained the format and filename for compatibility.[3] Other web servers, including Oracle iPlanet Web Server and the Zeus Web Server, later added .htaccess support even though their native configuration formats differ substantially.
Format and language
.htaccess files use a subset of the Apache HTTP Server directive syntax, which is the same format as the server's main httpd.conf configuration file.[4] Directives are plain-text instructions, one per line, that Apache interprets on each request.
Some directives—particularly those provided by mod_rewrite—accept regular expressions using PCRE syntax. PCRE is used only within those specific directives (such as RewriteRule and RewriteCond); it is not a property of the .htaccess format itself.
For historical reasons the format is recognized by servers such as Oracle iPlanet Web Server[5] and Zeus Web Server, even though those servers use different native configuration formats.
Common usage
- Authorization and authentication
- A .htaccess file commonly restricts access to a directory. It is often paired with a .htpasswd file that stores usernames and password hashes.[6]
- URL rewriting
- Servers use .htaccess with mod_rewrite to rewrite long or complex URLs to shorter, more readable forms.
- Access control
- The
AllowandDenydirectives (orRequirein Apache 2.4) restrict access by IP address, domain, or other criteria, and can block unwanted bots or referrers. - Server-side includes
- The
Options +Includesdirective enables server-side include processing for a directory. - Directory listing
- The
Optionsdirective controls whether the server generates an automatic index when no default document is present. - Custom error responses
- The
ErrorDocumentdirective maps HTTP error codes—such as 404 Not Found or 301 Moved Permanently—to custom pages.[7] - MIME types
- The
AddTypedirective instructs Apache how to serve files with non-standard or missing extensions. - Cache control
- .htaccess files can set
Cache-ControlandExpiresheaders viamod_headersormod_expires, reducing bandwidth use and server load.[8] - HTTPS and HSTS
- Enforcing HTTPS on Apache typically requires
RewriteRuledirectives andHeaderdirectives in .htaccess. Syntax errors in these rules can cause failed redirects or broken HSTS deployment.
Advantages
- Immediate effect
- Because .htaccess files are read on every request, changes take effect immediately—unlike the main server configuration, which requires a server restart.
- Non-privileged users
- On shared web hosting servers, .htaccess allows individual users to adjust their own directory configuration without access to the server's main configuration files.[9]
Disadvantages
Using the main server configuration file httpd.conf[10] is generally preferred for performance and security reasons:[11]
- Performance
- Each HTTP request causes Apache to check for .htaccess files in the requested directory and every parent directory where overrides are permitted. On high-traffic servers this adds measurable filesystem overhead. Directives can be migrated from .htaccess to httpd.conf to eliminate this cost.[12]
- Security
- Allowing users to modify server configuration can introduce security issues if the permitted directives are not carefully restricted.[13]
- Syntax sensitivity
- Apache will return a server error (typically 500) for the entire directory if the .htaccess file contains a syntax error, making all resources in that directory inaccessible.