在htaccess中检查%{REQUEST_FILENAME}时出现奇怪的行为

时间:2014-10-16 04:18:31

标签: .htaccess mod-rewrite

我对我的htaccess配置感到困惑。这是我网站的结构:

\www
    \public
        \css
        \js

www目录中,我有一个像这样的htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^\.htaccess$ - [F]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www\.example\.com/$1 [R,L]

RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{REQUEST_URI} !^/public/.
RewriteRule ^(.*)$ /public/$1 [NC,L]

这个位于public目录:

RewriteBase /public/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ - [NC,L]

当我访问css目录时,浏览器地址栏将以两种不同的方式显示:

www.example.com/css - > www.example.com/public/css /

www.example.com/css/ - > www.example.com/css /

任何人都可以向我解释这种差异,我如何配置以使它们都返回第二个结果www.example.com/css/

1 个答案:

答案 0 :(得分:0)

由于mod_dir在重写规则后添加了一个尾部斜杠,因此会发生这种情况。你的root .htaccess是这样的:

RewriteEngine On
RewriteBase /

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R,L,NE]

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