使用更改的RewriteCond检查文件是否存在于多个位置

时间:2010-05-29 13:04:24

标签: .htaccess mod-rewrite

我想使用mod-rewrite在两个不同的位置检查文件:请求的URL,以及“public”目录中请求的URL。

这是我到目前为止所拥有的:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f  #this line isn't working
RewriteRule ^(.*)$ index.php?$1 [L]

它可以正确地确定文件是否存在,但是它无法正确确定文件是否位于/public/supplied/file/path/file.extension。我该如何测试?

1 个答案:

答案 0 :(得分:4)

  

我实际上意识到问题是public /不在根目录中。它位于.htaccess所在的目录中。有没有办法获取.htaccess所在的目录,所以这可以在不同的位置工作而无需手动修改每个.htaccess?

您可以执行子请求。 -F标志将相对路径视为.htaccess所在目录的相对路径。所以:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond public/$0 !-F
RewriteRule ^(.*)$ index.php?$1 [L,B]

请注意,-F意味着比-f更大的性能损失,因为生成子请求而不仅仅是stat。您还应该添加B标志以逃避您的后退参考。