Add a trailing slash to requested urls

Description of the problem

Some search engines remove the trailing slash from urls that look like directories – e.g. Yahoo does it. But – it could result into duplicated content problems when the same page content is accessible under different urls. Apache gives some more information in the Apache Server FAQ.

Let’s have a look at an example: enarion.net/google/ is indexed in Yahoo as enarion.net/google – which would result in two urls with the same content.

Solution

The solution was to create a .htaccess rewrite rule that adds the trailing slashes to these urls.

Example – redirect all urls that doesn’t have a trailing slash to urls with a trailing slash

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !example.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

Explanation of this add trailing slash .htaccess rewrite rule

The first line tells Apache that this is code for the rewrite engine of the mod_rewrite module of Apache.
The 2nd line sets the current directory as page root. But the interesting part is following now:

RewriteCond %{REQUEST_FILENAME} !-f makes shure that files that are existing will not get a slash added. You shouldn’t do the same with directories since this would exlude the rewrite behaviour for existing directories.

The line RewriteCond %{REQUEST_URI} !example.php exludes a sample url that shouldn’t be rewritten. This is just an example – if you don’t have any file or url that shouldn’t be rewritten, remove this line.

The condition RewriteCond %{REQUEST_URI} !(.*)/$ finally fires when a urls doesn’t contain a trailing slash – this is all what we want. Now we need to redirect these url with the trailing slash:

RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301] does the 301 redirect to the url with the trailing slash appended for us. You should replace domain.com with your url. Make shure that you stick with the right domain name; if unshure, have a look at this article.