Overview
DreamHost enables directory indexing by default, which lets visitors see a list of files in any directory that has no index file. You control this behavior — turning it off, turning it on for specific folders, or setting alternative index files — by editing your site's .htaccess file.
Background
Directory indexing allows visitors to view a list of files instead of the actual webpage. When directory indexing is enabled, visitors can look inside any directory that does not have an index.html (or index.php) file in it and browse its contents. This is probably not the behavior you typically want, especially if the directory contains script configuration files, which can pose a security risk.
See this article to learn more about how to create an .htaccess file on your web server
If the file already exists, see the following articles for instructions on how to update it (depending on if you're using an FTP client or SSH):
How do I manage directory indexes?
You can control how directory indexes function on your website by making various modifications to the .htaccess file.
If your web server was recently upgraded to Ubuntu 18 (Bionic), your site may display a Coming Soon page that does not exist on your web server. To fix this, you can add the following line to your site's .htaccess:
DirectoryIndex disabled
How do I turn off directory indexes?
To disable directory indexes throughout your entire site, place the following line within an .htaccess file in your domain's folder:
Options -Indexes
When a visitor tries to browse the contents of any directory of your site, a 403 (Forbidden) error appears.
If a subdirectory contains an index file (such as index.html), that directory will still load. This option only disables directories without index files.
How do I turn on directory indexes for specific folders?
If there's a particular directory in your site that you do want visitors to browse, simply create a new .htaccess file in that particular folder and add the following:
DirectoryIndex disabled Options +Indexes
This overrides the global setting and allows users to view the contents of that directory.
How do I use alternative index files?
When a visitor accesses your website, the server checks the folder for an index file. Some examples of common index files are:
- index.htm
- index.html
- index.php
- index.cgi
- index.pl
The supported index files depend on how the server is set up. DreamHost's servers are set to:
DirectoryIndex index.html index.shtml index.htm Index.html Index.htm Index.shtml default.htm Default.htm default.html Default.html default.shtml Default.shtml page1.html index.pl index.cgi index.php index.php3 index.phtml home.htm home.html home.shtml index.wml index.pcgi quickstart.html
Index files guidelines
Make sure you are aware of the following when working with alternative index files:
- As long as you name your index file any one of the above, it will automatically load.
- When you add a new domain/subdomain to your account, DreamHost creates a quickstart.html file for you and places it in your directory, which loads by default unless you delete it or add your own index file.
- If you have two files with names from the list above, Apache shows the one that appears first (e.g., index.html shows up even if you have an index.php file in the same directory).
- You can change your own DirectoryIndex setting to anything you choose using an .htaccess file. If the server cannot find an index file, it tries to display an index of all the files within the current directory; however, if this is disabled, the server displays a 404 forbidden error.
Changing the index file
Using an .htaccess file, you can change the index file to something else other than any of the index defaults listed above. To do this, insert the following line into an .htaccess file:
DirectoryIndex pagename.html
Change pagename.html to the page you wish to use as the index file. When you visit your site, the pagename.html file displays, not your index.html file.
If the DirectoryIndex is missing
If you specify something like example.html as the DirectoryIndex and you have not uploaded this file to your web directory, Apache shows a listing of all files since it cannot find the one you specified. Be careful where you place this rule (or any rule) because it is recursive.
How do I set up a fail-safe directory listing?
The following allows a specific file to load just in case there is no default index file already set up:
Options -Indexes
DirectoryIndex index.php index.html /example.php
When a visitor requests a directory, Apache searches for index.php and then index.html. If neither is found, it displays /example.php.