Question

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?

Was it helpful?

Solution

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

OTHER TIPS

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]

Please use this format in .htaccess,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top