在不更改url的情况下将所有请求重写到子文件夹,并在文件夹存在时强制url?

时间:2014-07-30 12:25:47

标签: apache .htaccess mod-rewrite

我正在重写所有对名为public 的文件夹的请求,而在我的根目录中使用.htaccess更改网址。现在,如果我转到http://sitename.com/js,那么它会重定向到http://sitename.com/public/js。但是,如果我转到http://sitename.com/js/,那么它可以正常工作,而无需更改网址。有人可以解释为什么并帮助我吗?

root 目录

中的

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1 [L]

1 个答案:

答案 0 :(得分:1)

这是因为mod_dirmod_rewrite之后运行并添加了一个尾部斜杠。

你的规则如下:

RewriteCond %{THE_REQUEST} /public/(css|js) [NC]
RewriteRule ^ - [L,R=401]

RewriteCond %{DOCUMENT_ROOT}/public/$1/ !-d [NC]
RewriteRule ^((?!public/).*?)/?$ public/$1 [L,NC]

RewriteCond %{DOCUMENT_ROOT}/public/$1 -d [NC]
RewriteRule ^((?!public/).+?)/?$ public/$1/ [L,NC]