我对我的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/
答案 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]