我想使用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。我该如何测试?
答案 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
标志以逃避您的后退参考。