htaccess规则跳过文件和目录,但首先通过匹配前缀进行检查

时间:2013-10-05 01:41:01

标签: .htaccess url-rewriting

我正在使用以下规则,如果已提供路径,则会跳过文件。

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^$ public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.+)$ public/index.php?r=$1 [L,QSA]

但这使我能够访问site.com/public/js/somefile.js这样的文件,而不是意图。

我们可以检查文件是否存在于目录中并重写URL以便以“site.com/js/somfile.js”的形式访问它

RewriteCond %{REQUEST_FILENAME} -"public/"f
RewriteRule ^ - [L]

Obvioulsy这不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在此规则之前:

RewriteRule ^$ public/index.php [NC,L]

添加此规则:

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^(.+)$ /public/$1 [L]