htaccessredirect到子文件夹,并以斜线结尾

我成功地设法将所有请求redirect到我的Web服务器的子文件夹。

这是我正在使用的代码:

/.htaccess

RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !^/public/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /public/$1 [L] 

/public/.htaccess

 # redirect all urls that doesn't have a # trailing slash to urls with a trailing slash # (this is my try) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ $1 [NC] 

它完美的工作,所以下面的redirect工作:

 example.com -> example.com/public/ example.com/foo/ -> example.com/public/foo/ example.com/foo/about.html -> example.com/public/foo/about.html 

顺便说一句,以下redirect有一个问题:

 example.com/foo -> example.com/public/foo 

虽然它redirect正确,但地址栏中的实际URL是:

 example.com/public/foo/ 

所以我的问题是:

当从一个没有正斜杠的URLredirect时,如何获得一个干净的URL

希望这是有道理的。

将这段代码放在root .htaccess中:

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

那么只需删除/public/.htaccess因为这是不需要的。