Remove trailing slash using .htaccess in WordPress
It might be as simple as go to settings > permalinks in the wp admin and remove the trailing slash at the input box for custom structure
Here are the steps to remove trailing slashes site-wide. If you simply wish to remove the trailing slashes on posts only, skip to Step 2.
Important Things To Consider
- In
.htaccess
, the code between lines# BEGIN WordPress
&# END WordPress
may get reset by WordPress. Avoid changing code between those lines. - Forcing removal of trailing slashes, causes a loop in example.com/wp-admin. You can avoid the issue by excluding directories
RewriteCond %{REQUEST_FILENAME} !-d
.
The following solution addresses those issues.
Step 1 - Update /.htaccess file
Add the following code before the # BEGIN WordPress
line in your /.htaccess file. This redirects URLs with trailing slashes to URLs with no trailing slashes.
# Remove trailing slashes<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.+)/$ /$1 [R=301,L]</IfModule>
Step 2 - Update Permalinks
As others have pointed out, you must also update your Permalinks (Settings -> Permalinks) to Custom Structure, and remove the trailing slash there. It removes the trailing slash on all your posts.
Try this:
# BEGIN WordPress<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteRule (.+)/$ $1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]</IfModule>
If it doesn't work try this one:
# BEGIN WordPress<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteRule (.+)/$ http://www.domain.com/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]</IfModule>