Reputation: 5708
I'm trying to get the following effect (using this local file http://localhost/[company_name]/[project_name]/.htaccess
):
http://localhost/[company_name]/[project_name]/page-1 (adds slash)
http://localhost/[company_name]/[project_name]/page-1/ (does nothing)
http://localhost/[company_name]/[project_name]/page-1/subpage-1 (adds slash)
http://www.example.com/page-1 (adds slash)<br />
http://www.example.com/page-1/ (does nothing)
etc.
The thing I want to accomplish is that this .htaccess doesn't need the path http://localhost/[company_name]/[project_name]/
anymore so that I don't have to edit this each time it's been uploaded.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
I found the code above here: Add Trailing Slash to URLs, but it only makes it possible to use the HOST dynamically and discards the path. Does someone a solution to accomplish this effect?
Upvotes: 21
Views: 62354
Reputation: 8723
The problem with all other answers: POST requests lose their data when redirected. You can instruct the browser to resend the POST data by using http 307:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=307]
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307
Btw I prefer the REQUEST_FILENAME condition. This makes sure that the request really targets a folder structure and not appends the slash to file Urls.
Upvotes: 1
Reputation: 5708
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
This code needs to be put at the top of your .htaccess file below RewriteEngine On
Upvotes: 65
Reputation: 11
Please use this format in .htaccess,
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]
Upvotes: 1
Reputation: 51
Please add below lines top of .htaccess file
RewriteEngine on
#Add Trailing slash for end of the URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R]
Upvotes: 2