On my forum the absence of a trailing slash after the forum slug results in a redirect to the url with the trailing slash added. The issue the OP raised caught my attention as either format (xxx/ = directory, otherwise xxx is a file) will be properly indexed but the site should render url’s and any canonical the same format through out simply to avoid content duplicate indexing which is an SEO concern only.
Beyond the advice given check or re-apply the default .htaccess generated by WP and might be modified by cache/SEO plugins, and the redirect behavior I noted earlier should occur.
Here’s my .htaccess noting I use latest WP and Comet Cache Pro/All in One SEO and SSL forced for all pages:
# BEGIN Comet Cache WmVuQ2FjaGU (the WmVuQ2FjaGU marker is required for Comet Cache; do not remove)
# Enable GZIP compression.
<IfModule deflate_module>
<IfModule filter_module>
AddOutputFilterByType DEFLATE text/plain text/html
AddOutputFilterByType DEFLATE text/xml application/xml application/xhtml+xml application/xml-dtd
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml image/svg+xml
AddOutputFilterByType DEFLATE text/css text/javascript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE font/opentype application/font-otf application/x-font-otf
AddOutputFilterByType DEFLATE font/truetype application/font-ttf application/x-font-ttf
</IfModule>
</IfModule>
# Enable browser caching.
FileETag mtime size
<IfModule expires_module>
ExpiresActive on
ExpiresDefault "access plus 1 week"
</IfModule>
# Force a trailing slash on all virtual requests (except WP admin area).
<IfModule rewrite_module>
RewriteEngine On
RewriteBase /
# If not a real file or directory.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Not a part of the WP admin area.
RewriteCond %{REQUEST_URI} !(?:^|/)wp\-admin(?:/|$)
# Not a REST request, which never redirects.
RewriteCond %{REQUEST_URI} !(?:^|/)wp-json(?:/|$)
# If there is no trailing slash.
RewriteCond %{REQUEST_URI} !/$
# Force a trailing slash on all virtual requests.
RewriteRule ^(.*)$ $1/ [QSA,L,R=301]
</IfModule>
# END Comet Cache WmVuQ2FjaGU
#AddHandler mod-fcgid .php
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# SSL #
RewriteEngine on
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HSTS SSL #
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS