我正在对每个与现有文件或目录不匹配的请求使用 mod_rewrite 进行重写。这是我的配置:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
这用于将 /abc/foo
或 /abc/foo/10
等 URL 映射到我的应用程序。而且效果很好。
为了提高性能,我的应用现在将调用 /abc/foo
的结果存储在相应目录 /abc< 中的文件
- 这样在第一次调用后重写条件不再适用(文件不存在),apache 直接提供数据而无需先调用应用程序。效果也很好。foo
中
问题是:请求 /abc/foo/10
现在不再导致 URL 被重写,而是收到错误“404 File Not Found”。日志条目表明重写条件 !-f
不再为真,但实际上文件 /abc/foo/10
确实 not 存在. /abc/foo
存在,但是是文件,不是目录。
我怎样才能让它工作?
(多 View 已禁用)
最佳答案
这是因为 foo 作为文件存在,而 apache 为 foo 提供附加的/10 作为查询字符串传递。因此,您的应用程序应该向 foo 文件写入一些额外的代码,该代码还会检查请求是否包含一些额外的 url 组件,然后处理目录“foo”和文件 10 的创建。
关于如果路径上的文件存在,Apache 不会重写请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483005/