Apache 在现有重写规则中强制尾部斜杠和301重定向

Apache 在现有重写规则中强制尾部斜杠和301重定向,apache,.htaccess,redirect,mod-rewrite,url-rewriting,Apache,.htaccess,Redirect,Mod Rewrite,Url Rewriting,我有一个显示目录内容的重写规则。例如,如果我转到https://www.example.com/bob/,它将显示文件的内容https://www.example.com/profile/index.php?username=bob 代码如下: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([\w-]+)/$ profile/index.php?username=$1 [

我有一个显示目录内容的重写规则。例如,如果我转到
https://www.example.com/bob/
,它将显示文件的内容
https://www.example.com/profile/index.php?username=bob

代码如下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ profile/index.php?username=$1 [QSA,L]

但是我怎样才能301重定向
https://www.example.com/bob
https://www.example.com/bob/
(强制尾部斜杠)?

您可以将此规则放在上述规则之前,以强制尾部斜杠:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

这是可行的,但它给了我另一个问题。如果我转到
/login
(页面,而不是目录),它会工作,但如果我尝试转到
/login/
,它会将我重定向到
/login/.php/
。如果重要的话,我也在使用
RewriteCond%{REQUEST\u FILENAME}-d RewriteCond%{REQUEST_FILENAME}.php-f RewriteRule^([^\.]+)$$1.php[NC,L]RewriteCond%{REQUEST_FILENAME}.html-f RewriteRule^([^\.]+)$$1.html[NC,L]
隐藏.html和.php文件扩展基于我之前的问题,只有在使用我的重写代码的情况下,才可能强制使用尾部斜杠吗?您能否提供您的完整.htaccess,以便我进行调查,然后提出有效的解决方案。