我正在使用mod_rewrite对每个与现有文件或目录不匹配的请求进行重写。这是我的配置:如果路径上存在文件,Apache不会重写请求
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
这是用来像/abc/foo
或/abc/foo/10
到我的应用程序URL映射。它工作得很好。
为了提高性能,我的应用程序现在存储调用的结果/abc/foo
在文件foo
在相应的目录/abc
- 这样在第一次调用后改写条件就不再适用(文件不存在)和apache直接提供数据而不必先调用应用程序。工作得很好。
问题是:现在请求/abc/foo/10
不再导致URL被重写,而是出现错误“404 File Not Found”。日志条目指出重写条件!-f
不再为真,但实际上文件/abc/foo/10
确实存在而不是。 /abc/foo
存在,但是一个文件,而不是一个目录。
我该如何得到这个工作?
(多视图被禁用)
让我得到这个正确的,所以当你提出要求'/ ABC /富/ 10',你想要的数据也下/ ABC下FOO被写入到文件夹一个名为10的文件?这是你在第二次电话中所期待的吗? –
不,问题是如果文件'/ abc/foo'存在,调用'/ abc/foo/10'不再匹配'RewriteCond%{REQUEST_FILENAME}!-f'。 – Niko
为什么不先把'RewriteCond%{REQUEST_FILENAME}!-d'放入'RewriteCond%{REQUEST_FILENAME}!-f'中,然后看到结果,并且重写规则^(。*)$而不是^。 * $并直接指向index.php而不是/index.php –