htaccess重定向到带有斜杠的子文件夹

时间:2014-05-05 20:09:01

标签: apache .htaccess mod-rewrite redirect rewrite

我成功设法将所有请求重定向到我的网络服务器的子文件夹。

这是我使用的代码:

/。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]

它完美无缺,因此以下重定向工作:

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

顺便说一下,以下重定向有问题:

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

虽然它正确重定向,但地址栏中的实际网址是:

example.com/public/foo/

所以我的问题是:

如何在没有正斜杠的情况下从URL重定向时,如何拥有干净的网址

希望它有意义。

1 个答案:

答案 0 :(得分:0)

将此代码放在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,因为不需要。