What is .htaccess?
.htaccess is a configuration file for use on web servers running the Apache Web Server software. When a .htaccess file is placed in a directory which is in turn ‘loaded via the Apache Web Server’, then the .htaccess file is detected and executed by the Apache Web Server software. These .htaccess files can be used to alter the configuration of the Apache Web Server software to enable/disable additional functionality and features that the Apache Web Server software has to offer.
Things you can do with .htaccess
Below are the common uses of .htaccess:
Error documents
Creating custom error pages is very useful, it allows you to show web site visitors a friendly error message, for instance if a URL on your web site does not work. This avoids the unfriendly ’404 File Not Found’ error and allows you to display a friendly error, explaining possible solutions and guiding the visitor back into your web site content, rather than leaving them frustrated and lost.
Redirects
Redirects enable us to direct web site visitors from one document within your web site to another. This is useful for example, if you have moved your web site content and would like to redirect visitors from old links to the new content location.
Password protection
The password protection and authentication systems offered by the Apache Web Server are probably the most important use of .htaccess files. Very easily, we can password protect a directory (or multiple) of a web site which require a username and password to access. The login procedure for these secure directories is handled automatically by the web browser using a pop-up login interface (you’ve probably seen these before). Passwords are also encrypted using one of the best encryption methods available which ensures login credentials are kept secure. In this section we will discuss the details of the .htaccess authentication system, we will explain how to set-up password protection, and a variety of helpful related information, we will also explain a variety of pre-made software which can be used to accomplish these tasks.
Deny visitors by IP address
The visitor blocking facilities offered by the Apache Web Server enable us to deny access to specific visitors, or allow access to specific visitors. This is extremely useful for blocking unwanted visitors, or to only allow the web site owner access to certain sections of the web site, such as an administration area.
Deny visitors by referrer
The visitor blocking facilities offered by the Apache Web Server enable us to deny access to specific visitors based on where they have come from. If you’ve ever looked at your logs and noticed a surprising increase in traffic, yet no increases in actual file requests it’s probably someone pinching content (such as CSS files) or someone attempting to hack your web site (this may simply mean trying to find non public content).
Note, this functionality requires that ‘mod_rewrite’ is enabled on your server. Due to the demands that can be placed on system resources, it is unlikely it is enabled so be sure to check with your system administrator or web hosting company.
Hot link prevention
Hot link prevention refers to stopping web sites that are not your own from displaying your files or content, e.g. stopping visitors from other web sites. This is most commonly used to prevent other web sites from displaying your images but it can be used to prevent people using your JavaScript or CSS (cascading style sheet) files. The problem with hot linking is it uses your bandwidth, which in turn costs money, hot linking is often referred to as ‘bandwidth theft’.
Using .htaccess we can prevent other web sites from sourcing your content, and can even display different content in turn. For example, it is common to display what is referred to as an ‘angry man’ images instead of the desired images.
Note, this functionality requires that ‘mod_rewrite’ is enabled on your server. Due to the demands that can be placed on system resources, it is unlikely it is enabled so be sure to check with your system administrator or web hosting company.
Blocking offline browsers and ‘bad bots’
Offline browsers are pieces of software which download your web page, following the links to your other web pages, downloading all the content and images. The purpose of this is innocent, so the visitor can log off the Internet and browse the site without a connection, but the demand on the server and bandwidth usage can be expensive. Bad bots as they are often called refers to programs which visit your web site, either to source content, look for security holes or to scan for email addresses. This is often how your email address ends up on ‘Spam’ databases, because they have set a ‘bot’ to scan the Internet and collect email addresses. These programs and ‘bots’ often ignore the rules set out in ‘robot.txt’ files.
DirectoryIndex uses
The directoryindex command allows you to specify a default page to display when a directory is accessed. For instance, if a visitor requests a directory on your web site, you can specify the file to load when the directory is accessed (if a filename is not specified in the initial request). For example, to display a ‘index.html’ file rather than showing directory listings or to load a ‘index.php’ file rather than an ‘index.html’ file.
Adding MIME types
MIME types set what a file is, or rather what file extensions refer to what file types. For example, a ‘.html’ file extension refers to a HTML document, a ‘.zip’ file extension refers to a ZIP archive file. The server needs to know this so it knows how to deal with the file. This is often used to create custom file extension for common file types.
Enabling SSI (Server Side Includes)
SSI stands for server side includes, these are special HTML tags which you can include in your HTML documents to call CGI scripts or other HTML content. This is particularly useful, for example to include a navigation menu in your HTML documents, it allows you to use one document to display the navigation menu in all your other documents. This saves disk space and means if you need to update the content, you only need to modify one file.
Enabling CGI outside of the cgi-bin
If your web server does not allow you to run CGI scripts outside of the ‘cgi-bin’ directory, you can enable CGI. Check with your system administrator or web hosting company before doing so.
Disable directory listings
Preventing directory listings can be very useful if for example, you have a directory containing important ‘.zip’ archive files or to prevent viewing of your image directories. Alternatively it can also be useful to enable directory listings if they are not available on your server, for example if you wish to display directory listings of your important ‘.zip’ files.
Setting server timezone
To set your web servers date timezone.
Changing server signature
To change the server signature which is displayed as part of the default Apache error documents.
Preventing access to your PHP includes
If you have a directory containing PHP includes, that you do not wish to be accessed directly from the browser, there is a way of disabling the directory using Mod_Rewrite.
Prevent access to php.ini
If you run the risk of someone accessing your php.ini or php.cgi files directly through their browsers, you can limit access to them using .htaccess.
Forcing scripts to display as source code
If you need to display scripts as source code, instead of executing, for example to allow review, this can be achieved with the Remove Handler function.
Ensuring media files are downloaded instead of played
It is possible to ensure that any media files are treated as a download, rather than to be played by the browser.
Setting up Associations for Encoded Files
Some browsers are capable of uncompressing encoded information as they receive it.
Preventing requests with invalid characters
If you wish, you can use Mod_Rewrite to deny requests containing invalid characters, please be aware that with certain site setups this may break links.





Faramarz Kolivand is Founder and President of FaraJoomla Web Design and Development. He is also a web designer and web developer with over 8 years experience providing website design and web development services to companies, businesses and individuals.